MySQL數據庫服務器 主從配置,mysql主從
A B 為兩台 MySQL 服務器,均開啟二進制日志,數據庫版本 MySQL 5.5
一、服務器參數
[A 服務器 192.168.1.100]
server-id = 1
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
sync-binlog = 1
[B 服務器 192.168.1.101]
server-id = 2
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
sync-binlog = 1
重啟A、B的數據庫服務器
二、操作步驟
# A B 服務器停止同步
STOP SLAVE;
# A B 服務器清空MASTER日志
RESET MASTER;
# A B 服務器清空SLAVE日志
RESET SLAVE;
# A 服務器授權同步賬戶 (我們會同步一次復制數據庫文件,所以授權為192.168.1%)
GRANT REPLICATION SLAVE ON *.* TO 'master_slave'@'192.168.1%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
# A 服務器鎖表(鎖表狀態下不能終止mysql進程,否則會失敗)
FLUSH TABLES WITH READ LOCK;(當線上正在運行數據庫時,進行鎖表操作,數據不在寫入)
# 如果使用SSH,需要重新開啟,復制數據庫文件。
tar -cvf /tmp/mysql-data.tar /www/mysql
tar -xvf /tmp/mysql-data.tar -C /
# 查看 A 服務器主機狀態(記錄二進制開始文件,位置)
SHOW MASTER STATUS;
# B 服務器鎖表(鎖表狀態下不能終止mysql進程,否則會失敗)
FLUSH TABLES WITH READ LOCK;
# 修改 B 服務器配置 (修改為A服務器的主機狀態)
CHANGE MASTER TO MASTER_HOST='192.168.1.100',MASTER_USER='master_slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=106;
MASTER_LOG_FILE 對應A 服務器show master status中的File;MASTER_LOG_POS對應A 服務器show master status中的Position
上圖箭頭所指的兩個參數如果都為yes,就代表同步成功。
# 開啟 B 服務器同步進程
START SLAVE;
# 查看 B 服務器同步狀態是否正常
SHOW SLAVE STATUS;
-------------------------------------------
主從配置完畢,下面是互為主從
------------------------------------------
下面的屬於主主配置,一般很少會用到,可能會遇到沖突。
# 查看 B 服務器主機(記錄二進制開始文件,位置)
SHOW MASTER STATUS;
# 修改 A 服務器配置 (修改為B服務器的主機狀態)
CHANGE MASTER TO MASTER_HOST='192.168.1.101',MASTER_USER='master_slave',MASTER_PASSWORD='master_slave123!@#',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=106;
# 開啟 A 服務器同步進程
START SLAVE;
# 分別查看 A B 服務器同步狀態,確定是否成功
SHOW SLAVE STATUS;SHOW MASTER STATUS;
# 解鎖 A B 服務器
UNLOCK TABLES;
# 數據測試分別在 A B 服務器上創建表插入數據測試
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` varchar(100) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO `test` VALUES ('1', 'Hello');
注意:
1. 數據庫目錄下的master.info的內容會覆蓋命令行或my.cnf中指定的部分選項,更改配置需刪除master.info
2. my.cnf中的master配置在MySQL 6.0以後會取消,官方建議使用動態的CHANGE MASTER
3. 如果只指定ignore-db而不指定do-db。則新創建數據庫的操作也會同步。
4. 一定要stop 主數據庫服務器的防火牆,不然從服務器不能遠程訪問主服務器。
互為同步配置實例:
1. A B 互為主從同步test, 不同步mysql:
兩個數據庫配置中均設置:binlog-do-db=test, binlog-ignore-db=mysql,replicate-do-db=test,replicate-ignore-db=mysql
2. A B 互為主從只同步test,不同步其他數據庫,新創建的也不會同步
兩個數據庫配置中均設置:binlog-do-db=test,replicate-do-db=test
3. A B 互為主從不同步mysql, 同步其他數據庫,譬如創建的新數據庫也會同步
兩個數據庫配置中均設置:binlog-ignore-db=mysql,replicate-ignore-db=mysql
4. A B 互為主從同步所有數據庫,包括新建的數據庫
兩個數據庫配置中均不設置上述四項
分享到: