依然是通過(guò)mysqld_multi管理mysql的兩個(gè)實(shí)例惜论,通過(guò)配置my.cnf實(shí)現(xiàn)主從同步
- 將一號(hào)實(shí)例作為master彩掐,mysql1下加入如下配置
[mysqld1]
集群中每個(gè)實(shí)例的id必須唯一
server_id = 1
# 指定同步lfz庫(kù)焕数,其它庫(kù)不進(jìn)行同步
binlog-do-db = lfz
# 可以指定哪些庫(kù)不進(jìn)行同步
# binlog-ignore-db = mysql
# 開(kāi)啟二進(jìn)制日志功能
log-bin=3306logbin
# 為每個(gè)session分配的內(nèi)存泽疆,在事務(wù)過(guò)程中存儲(chǔ)二進(jìn)制日志的緩存
binlog-cache-size = 1M
# 主從復(fù)制的格式(mixed要门,statement榜晦,row)冠蒋,默認(rèn)值statement
binlog_format = mixed
# 默認(rèn)0,代表二進(jìn)制日志不會(huì)自動(dòng)刪除乾胶,這里設(shè)置為7天
expire-logs-days = 7
# 跳過(guò)主從復(fù)制中遇到的所有錯(cuò)誤或指定錯(cuò)誤抖剿,避免slave端復(fù)制中斷统屈,1062指的是主鍵重復(fù),1032是主從數(shù)據(jù)不一致
slave_skip_errors = 1062
- 二號(hào)實(shí)例作為slave牙躺,在mysqld2中加入如下配置
[mysqld2]
server_id = 2
# 從機(jī)也可以作為別的從節(jié)點(diǎn)的主節(jié)點(diǎn)愁憔,所以也開(kāi)啟了binlog,所以加了這個(gè)選項(xiàng)
binlog-do-db = lfz
# 為了從節(jié)點(diǎn)作為別的從節(jié)點(diǎn)的主節(jié)點(diǎn)
log-bin=3307logbin
binlog-cache-size = 1M
binlog_format = mixed
expire-logs-days = 7
slave_skip_errors = 1062
# 中繼日志
relay_log = 3307relaylog
# slave將復(fù)制事件寫(xiě)入自己的二進(jìn)制日志
log_slave_updates = 1
# 從庫(kù)只讀孽拷,使用mycat讀寫(xiě)分離的主從切換就不能設(shè)置從庫(kù)只讀了
#read_only = 1
- 如果當(dāng)前master已經(jīng)有數(shù)據(jù)了吨掌,可以先將數(shù)據(jù)導(dǎo)出,再導(dǎo)入slave
# 登錄master鎖表脓恕,避免導(dǎo)出過(guò)程還有數(shù)據(jù)寫(xiě)入
flush tables with read lock
# 使用mysql自帶工具導(dǎo)出數(shù)據(jù)到文件膜宋,--add-drop-table代表在創(chuàng)建表之前先寫(xiě)入一條刪除表的語(yǔ)句
mysqldump -p3306 -uroot -p --add-drop-table -S 3306/mysql.sock lfz > ./tmp.sql
unlock tables;
# 導(dǎo)入slave
mysql -uroot -proot -S 3307/mysql.sock lfz< ../tmp.sql
- 設(shè)置slave實(shí)例并啟動(dòng)
# 登錄master查看狀態(tài),獲得當(dāng)前使用的binlog名字和偏移量
show master status;
# 登錄slave設(shè)置要使用的master信息
change master to master_host='127.0.0.1',master_user='root',master_password='root',master_port=3306,master_log_file='3306logbin.000003',master_log_pos= 120,master_connect_retry=30;
# 啟動(dòng)slave模式
start slave;
# 查看slave狀態(tài)
show slave status;
# 如果主從同步出了問(wèn)題炼幔,可以重置slave
reset slave;
change master...