這篇介紹基于日志的主從同步,适用于低版本的資料庫同步。
一、主庫
my.cnf,在[mysqld]下面加入:
server-id = 1
log-bin =mysql-bin
binlog_format = mixed
log=/data/mysql/data/mysql.log
max_connections = 100
max_connect_errors = 10
expire_logs_days = 99
開通用于binlog 複制的使用者
CREATE USER 'repl'@ '%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON . TO 'repl'@'%' IDENTIFIED BY 'repl_password';
鎖表防寫入
FLUSH TABLES WITH READ LOCK;
獲得基礎備份
mysqldump -uroot -ppassword --all-databases --lock-tables=false > /root/all.sql
mysqldump -uroot -ppassword --single-transaction --master-data=2 --all-databases | gzip >all.sql.gz //備份資料庫
使用scp指令傳輸資料庫檔案all.sql到從伺服器
scp /root/all.sql [email protected]:/root
gzip -cd all.sql.gz | /usr/local/mysql/bin/mysql -u root -ppassword
//還原資料庫
再次連接配接資料庫進入mysql指令行檢視master狀态
mysql>SHOW MASTER STATUS;
得到binlog 檔案和binlog pos
mysql-bin.000009 107
解鎖資料表
mysql>UNLOCK TABLES;
二、從庫
log-bin=mysql-bin #不是必須
binlog_format=mixed #跟随log-bin,不是必須
server-id=2
log_slave_updates
skip_slave_start
character_set_server = utf8
service mysqld restart
導入主伺服器的資料庫
mysql -u root -ppassword < /root/all.sql
登入mysql伺服器,執行以下指令
CHANGE MASTER TO MASTER_HOST='x.x.x.x',MASTER_USER='repl',MASTER_PASSWORD='repl_password',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS =107;
開啟從庫複制
start slave
show slave status G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
\如果此2項都為yes,master-slave配置即成功