MySQL主從同步,實作資料自動同步
MySQL主從復制相信已經用得很多了,但是由于作業原因一直沒怎么用過。趁著這段時間相對空閑,也就自己實作一遍。盡管互聯網上已有大把類似的文章,但是自身實作的仍然值得記錄。
主從同步原理
I/O執行緒會去讀主服務器上讀binlog日志,放到中繼日志檔案(relay-log)
SQL執行緒執行本機中繼日志檔案(relay-log)里的SQL陳述句,實作與主服務器資料一致
一主一從:
資料庫服務器192.168.4.51配置為主資料庫服務器
資料庫服務器192.168.4.52配置為從資料庫服務器
客戶端192.168.4.50測驗配置
配置主服務器192.168.4.51
啟用binlog日志
]# vim /etc/my.cnf
[mysqld]
server_id=51 //server_id
log-bin=master51 //日志名
:wq
]# systemctl restart mysqld
用戶授權
用戶名自定義、客戶端地址使用% 或 只指定 從服務器的地址 都可以、只給復制資料的 權限即可。
]# mysql -uroot -p密碼
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
mysql>quit;
查看binlog日志資訊
查看日志檔案名 和 偏移量位置。
mysql> show master status\G;
*************************** 1. row ***************************
File: master51.000001 //日志名
Position: 441 //偏移量
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
配置從服務器192.168.4.52
指定server_id
Server_id值可以自定義,但不可以與主服務器相同。
]# vim /etc/my.cnf
[mysqld]
server_id=52 //server_id值
:wq
]# systemctl restart mysqld //重啟服務
確保與主服務器資料一致(如果是使用2臺新部署的資料庫服務器配置主從同步,此操作可以忽略)
]# mysqldump -uroot –p密碼 --master-data 資料庫名 > /allbak.sql //在主服務器上備份資料
]# scp /allbak.sql [email protected]:/root/ //將備份檔案拷貝給從服務器
mysql> create database 資料庫名 ; //在從服務器上創建與主服務器同名的資料庫
]# mysql -uroot –p密碼 資料庫名 < /root/allbak.sql //從服務器使用備份檔案恢復資料
]# vim /root/allbak.sql //在從服務器查看備份檔案中的binlog日志資訊
......
......
CHANGE MASTER TO MASTER_LOG_FILE='master51.000001', MASTER_LOG_POS=441; //日志名與偏移量
指定主服務器資訊
資料庫管理員root本機登錄,指定主服務器資訊,其中日志檔案名和偏移量 寫allbak.sql檔案記錄的。
]# mysql -uroot –p密碼 //管理員root 本機登錄
mysql> show slave status; //查看狀態資訊,還不是從服務器
Empty set (0.00 sec)
mysql> change master to //指定主服務器
-> master_host=“192.168.4.51”, //主服務器ip地址
-> master_user=“repluser”, //主服務器授權用戶
-> master_password=“123qqq…A”, //主服務器授權用戶密碼
-> master_log_file=“master51-bin.000001”,//主服務器日志檔案
-> master_log_pos=441; //主服務器日志偏移量
mysql> show slave status\G; //查看狀態資訊
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.4.51 //主服務器ip地址
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master51.000001
Read_Master_Log_Pos: 437
Relay_Log_File: host52relay-bin.000002
Relay_Log_Pos: 604
Relay_Master_Log_File: master51.000001
Slave_IO_Running: Yes //IO執行緒yes狀態
Slave_SQL_Running: Yes //SQL執行緒yes狀態
客戶端測驗配置
在主服務器添加訪問資料的連接用戶
授權用戶對所有資料有增刪改查的權限即可
]# mysql –uroot –p密碼
mysql> grant select,insert,update,delete on *.* to admin@"%" identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> quit
客戶端連接主服務器訪問資料
在50主機 使用主服務器51的授權用戶連接
]# mysql -h192.168.4.51-uadmin -p123qqq...A
mysql> show grants;
+------------------------------------------------------------+
| Grants for admin@% |
+------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'admin'@'%' |
+------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> insert into db3.user(name,uid) values("lili",288); //db3庫和user表是主從同步之前主服務器已有的。
Query OK, 1 row affected (0.05 sec)
mysql> insert into db3.user(name,uid) values("lili",288);
Query OK, 1 row affected (0.28 sec)
mysql> insert into db3.user(name,uid) values("lili",288);
Query OK, 1 row affected (0.05 sec)
mysql> select name,uid from db3.user where name="lili";
+------+------+
| name | uid |
+------+------+
| lili | 288 |
| lili | 288 |
| lili | 288 |
+------+------+
3 rows in set (0.00 sec)
客戶端連接從服務器訪問資料
客戶端50主機使用授權用戶連接從服務器可以看到和主服務器同樣的資料
]# mysql -h192.168.4.52 –uadmin -p123qqq…A
mysql> select name,uid from db3.user where name="lili";
+------+------+
| name | uid |
+------+------+
| lili | 288 |
| lili | 288 |
| lili | 288 |
+------+------+
3 rows in set (0.00 sec)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/66279.html
標籤:實用資料發布區
下一篇:為什么在linux上面用qt播放音樂視頻一直顯示這個,安裝了那個gstreamer1.0-libav也還是不行,安裝完之后系統重啟都打不開
