mysql的主從複制廣泛用于資料庫備份、故障轉移、資料分析等場合。
mysql主從複制基于主伺服器在二進制日志中跟蹤所有對資料庫的更改(更新、删除等等)。是以,要進行複制,必須在主伺服器上啟用二進制日志。從伺服器從主伺服器接收已經記錄到其二進制日志的更新,當一個從伺服器連接配接主伺服器時,主伺服器從日志中讀取最後一次成功更新的位置,從伺服器接收從那時起發生的更新,并在本機上執行相同的更新,然後等待主伺服器通知新的更新。從伺服器執行備份不會幹擾主伺服器,在備份過程中主伺服器可以繼續處理更新。
測試環境
master: 192.168.10.201
slave: 192.168.10.202
端口: 3306
資料庫:test2
安裝mysql
yum install mariadb mariadb-server
systemctl enable mariadb
service mariadb start
mysqladmin -u root password abc@def
主伺服器配置
主伺服器配置檔案/etc/my.cnf
[mysqld]
server-id=1
binlog-do-db=test2
relay-log=/var/lib/mysql/mysql-relay-bin
relay-log-index=/var/lib/mysql/mysql-relay-bin.index
log-error=/var/lib/mysql/mysql.err
master-info-file=/var/lib/mysql/mysql-master.info
relay-log-info-file=/var/lib/mysql/mysql-relay-log.info
log-bin=/var/lib/mysql/mysql-bin
重新開機mysql
service mariadb restart
賦予replication slave權限
mysql -uroot -p
grant replication slave on . to 'slave_user'@'%' identified by 'password';
flush privileges;
flush tables with read lock;
show master status;
file
position
binlog_do_db
binlog_ignore_db
mysql-bin.000002
469
test2
1 row in set (0.00 sec)
注意:記下紅色部分,稍後還會用到。
備份資料庫
為了備份資料庫,需要為資料庫中所有表叫上“隻讀鎖” (read lock),再進行dump備份:
mysqldump -u root -p --all-databases --master-data > /root/dbdump.db
備份完成後,可以用以下指令解鎖:
unlock tables;
從伺服器配置
還原資料庫
mysql -u root -p < /root/dbdump.db
從伺服器配置檔案/etc/my.cnf
server-id=2
replicate-do-db=test2
連接配接主伺服器
stop slave;
change master to master_host='192.168.10.201', master_user='slave_user', master_password='password', master_log_file='mysql-bin.000002', master_log_pos=469;
start slave;
show slave statusg
1. row **
replicate_wild_ignore_table:
master_ssl_verify_server_cert: no
replicate_ignore_server_ids:
驗證
主伺服器
drop test2;
create database test2;
use test2;
create table emp (c int);
insert into emp (c) values (10);