主從同步原理
Master
- 啟用binlog日志
Slave:
- Slave_IO:復(fù)制master主機(jī) binlog日志文件里的SQL命令到本機(jī)的relay-log文件里峦睡。
- Slave_SQL:執(zhí)行本機(jī)relay-log文件里的SQL語句,實(shí)現(xiàn)與Master數(shù)據(jù)一致缀拭。
構(gòu)建主從同步
master(master:192.168.1.11)-->slave(slave:192.168.1.12)
主從同步實(shí)現(xiàn)步驟:
主服務(wù)器
- 啟用binlog日志
- 授權(quán)用戶
- 查看binlog日志信息
從服務(wù)器
- 設(shè)置server_id
- 確保與主服務(wù)器數(shù)據(jù)一致
- 指定主庫信息
- 啟動(dòng)slave程序
- 查看狀態(tài)信息
準(zhǔn)備主服務(wù)器數(shù)據(jù)
[root@mysql1 ~]# mysql -uroot -p123456 < mysql_scripts/mydb_data.sql
主服務(wù)器配置
# 修改配置文件
[root@mysql1 ~]# vim /etc/my.cnf
[mysqld]
server_id = 11
log-bin = master11
... ...
# 啟動(dòng)服務(wù)
[root@mysql1 ~]# systemctl restart mysqld
# 驗(yàn)證配置
[root@mysql1 ~]# ls /var/lib/mysql/master11.*
/var/lib/mysql/master11.000001 /var/lib/mysql/master11.index
[root@mysql1 ~]# mysql -uroot -p123456
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master11.000001 | 154 | | | |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
# 如果日志不是master11.000001织阳,希望回到最初狀態(tài)眶蕉,可以執(zhí)行以下命令:
mysql> reset master;
# 授權(quán)輔助服務(wù)器可以同步數(shù)據(jù)
mysql> grant replication slave on *.* to repluser@'%' identified by '123456';
mysql> show grants for repluser@'%';
+--------------------------------------------------+
| Grants for repluser@% |
+--------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%' |
+--------------------------------------------------+
1 row in set (0.00 sec)
配置從服務(wù)器
- 修改配置文件
[root@mysql2 ~]# vim /etc/my.cnf
[mysqld]
server_id = 12
... ...
[root@mysql2 ~]# systemctl restart mysqld
- 如果主服務(wù)器上已有一段時(shí)間的數(shù)據(jù),需要將主服務(wù)器數(shù)據(jù)完全同步到從服務(wù)器唧躲。
# 主服務(wù)器備份數(shù)據(jù)
[root@mysql2 ~]# mysqldump -uroot -p123456 --master-data mydb > /root/fullbackup.sql
[root@mysql2 ~]# scp /root/fullbackup.sql 192.168.1.12:/root/
# 從服務(wù)器恢復(fù)數(shù)據(jù)
mysql> create database mydb default charset utf8mb4;
[root@mysql2 ~]# mysql -uroot -p123456 mydb < /root/fullbackup.sql
--master-data`的作用:如果完全備份完成后造挽,又有新的數(shù)據(jù)產(chǎn)生,它可記錄備份時(shí)的數(shù)據(jù)狀態(tài)信息弄痹。
- 查看binlog日志名和偏移量
# 使用備份的方式同步主服務(wù)器數(shù)據(jù)饭入,在備份文件中查找
[root@mysql2 ~]# grep master11 fullbackup.sql
CHANGE MASTER TO MASTER_LOG_FILE='master11.000001', MASTER_LOG_POS=174149;
# 沒有進(jìn)行數(shù)據(jù)同步的,查看主服務(wù)器日志狀態(tài)
[root@mysql1 ~]# mysql -uroot -p123456
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master11.000001 | 174149 | | | |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
- 在從服務(wù)器上配置的主庫信息
[root@node30 ~]# mysql -uroot -p123456
mysql> change master to
-> master_host="192.168.1.11",
-> master_user="repluser",
-> master_password=123456,
-> master_log_file="master11.000001",
-> master_log_pos=174149;
Query OK, 0 rows affected, 2 warnings (0.10 sec)
-- 啟動(dòng)slave程序
mysql> start slave;
Query OK, 0 rows affected (0.03 sec)
- 驗(yàn)證:查看狀態(tài)信息
mysql> show slave status\G
... ...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
... ...