[toc]
Linux下mysql主從同步詳細配置
1.環(huán)境準備
準備兩臺服務器逗柴,一臺主服務器(Master),另一臺從服務器(Slave)院水,然后要保證Master與Slave的版本要相同且Master不能高于Slave的版本入蛆,一般穩(wěn)健的做法都是使其版本相同归敬,因為MySQL不同版本之間的binlog(二進制日志)格式可能會不一樣酷含,最后會導致同步出現(xiàn)異常。
介紹先到這里汪茧,以下我們先確認兩臺服務器的信息:
- 主服務器(master)
IP:10.16.195.49
系統(tǒng):Linux(redhat centos7 64)
mysql版本:8.0.17
同步數(shù)據(jù)庫:model_slave
同步帳號:model_slave
同步密碼:slave123
- 從服務器(slave)兩臺
IP:10.16.195.50/10.16.195.51
系統(tǒng):Linux(redhat centos7 64)
mysql版本:8.0.17
同步數(shù)據(jù)庫:model_slave
2.master服務器配置
1.修改主服務器配置文件
sudo vim /etc/my.cnf
[mysqld]
# 新增如下
server-id=1
log_bin=/data/mysql/mysql-bin.log
expire_logs_days=10
max_binlog_size=100M
binlog_do_db=myslave # 如果需要同時同步多個數(shù)據(jù)庫椅亚,請另起一行設置binlog_do_db=需要同步的數(shù)據(jù)庫名稱
binlog_ignore_db=mysql # 不想同步的數(shù)據(jù)庫
2.保存退出,重啟服務
service mysql restart
如果啟動失敗舱污,通過查看mysql啟動失敗的日志呀舔,從日志內(nèi)容尋找解決方案。
cat /data/mysql/mysql.log | tail -30
3.查看并記住master當前二進制名和偏移量。
這個操作的目的是為了在從數(shù)據(jù)庫啟動后媚赖,從這個點開始進行數(shù)據(jù)的恢復霜瘪。
mysql> show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.000002 | 155 | model_slave |mysql |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)
4.新建用于查看的mysql帳號
mysql>
create user 'model_slave'@'%' identified by 'slave';
grant replication slave on *.* to 'model_slave'@'%';
3.slave服務器配置
1.修改從服務器配置
sudo vim /etc/my.cnf
[mysqld]
server-id=2
master-host=192.168.8.10
master-user=rep1
master-password=test123456
master-port=3306
replicate-do-db=cmdb
2.重啟從服務器
service mysql restart
此時報錯:mysqld: unknown variable ‘master-host=
原因是mysql5.5+版本主從復制不支持這些變量,需要在從庫上用命令來設置:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.10',
MASTER_PORT=3306,
MASTER_USER='rep1',
MASTER_PASSWORD='test123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=155; # 后面兩個參數(shù)的值與主庫保持一致
注意惧磺,server-id仍然需要在配置文件中配置颖对,不然會和master一致,無法開啟主從磨隘。
3.啟動slave
mysql> slave start;
Query OK, 0 rows affected (0.04 sec)
4.查看slave的狀態(tài)
show slave status\G;
如果這兩項為yes缤底,則表示成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
5.如果有第二臺或更多從庫,配置操作同樣番捂,唯一注意的是配置文件中的server-id需要保持不同个唧。
3.同步主庫已有數(shù)據(jù)到從庫
主庫操作:
1.停止主庫數(shù)據(jù)更新操作
mysql>flush tables with read lock;
2.新開終端,生成主數(shù)據(jù)庫的備份(導出數(shù)據(jù)庫)
-–master-data:保證在dump時會記錄到binlog名稱和偏移值
-–lock-all-tables:為了數(shù)據(jù)在導出的時候沒有其它新數(shù)據(jù)插入设预,保證一致性
mysqldump –master-data=1 –lock-all-tables=true -uroot -pmysql123 model_slave > /home/model_slave_bak_20200317.sql
3.將備份文件傳到從庫
scp cmdb.sql gz_admin@10.16.195.50:/home/
4徙歼、主庫解鎖
mysql>unlock tables;
從庫操作:
1.停止從庫slave
mysql>slave stop;
2.新建數(shù)據(jù)庫model_slave
mysql> create database model_slave charset=utf8;
3、導入數(shù)據(jù)
[gz_admin@ops-dev ~]$ mysql -uroot -pmysql123 model_slave</home/model_slave_bak_20200317.sql
或
mysql> use myslave;
mysql> source /home/model_slave_bak_20200317.sql;
4鳖枕、查看從庫已有該數(shù)據(jù)庫和數(shù)據(jù)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| model_slave |
| mysql |
| performance_schema |
| test |
+--------------------+
4.測試同步
1.在master中插入一條數(shù)據(jù)
mysql> use model_slave;
mysql> INSERT INTO users(id,name,info) VALUES(1, "jack","handsom");
2.插入成功之后魄梯,稍等片刻,就可以在Slave服務器上查看到相同記錄.
不成功耕魄,仔細再檢查一些配置文檔。
3.查看當前Slave服務器的同步狀態(tài)及偏移值等信息
more /var/lib/mysql/master.info
查看Slave執(zhí)行binlog文件的情況
more /var/lib/mysql/relay-log.info
5.常見問題
1.問題現(xiàn)象
啟動slave彭谁,查看slave狀態(tài)吸奴,發(fā)現(xiàn)報錯。
有個錯誤IO線程在連接中, 還有一個問題就是:
Last_IO_Errno: 2061
Last_IO_Error: error connecting to master 'root@192.168.0.10:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
2.原因
加密方式和解密方式不一致缠局,修改密碼加密規(guī)則.進入mysql控制臺
ALTER USER 'model_slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave123';
FLUSH PRIVILEGES;
3.拋出另一個問題
Last_IO_Errno: 13117
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
4.解決方法:重啟mysql服務
service mysql restart
5.進入mysql则奥,重啟slave
mysql -u root -p
start slave
show slave status\G;
成功!