Mysql主從複製mysql
★優勢:sql
(1)若是主服務器出現問題,能夠快速切換到從服務器提供服務數據庫
(2)能夠在從服務器上執行查詢操做來下降主服務器的訪問壓力服務器
(3)能夠在從服務器上執行備份來避免備份期間影響主服務器的服務ide
通常只有更新不頻繁的數據或者實時性要求不高的數據能夠經過從服務器查詢,實時性要求高的數據仍然須要從主數據庫得到線程
★主服務器配置rest
登陸mysql數據庫日誌
mysql>mysql -uroot -p123456server
給從服務器設置受權用戶進程
mysql>grant all slave on *.* to user@192.168.16.105 identified by "123"
或者
mysql>grant replication slave on *.* user@192,168,16,105 identified by "123"
修改主數據庫服務器的配置文件my.cnf,開啓binlog,並設置server-id的值
log-bin=mysql-bin
server-id=1 <==主從server-id不能相同
在主服務器上設置讀鎖定,確保沒有數據庫操做,以便得到一個一致性的快照
mysql>flush tables with read lock
查看主服務器上當前二進制日誌名和偏移量值
mysql>show master status
目前主數據庫服務器已經中止了更新操做,生成主數據庫的備份
備份方式1:cp所有的數據
備份方式2:mysqldump備份數據庫
若是主數據庫的服務能夠中止,那麼直接cp數據文件應該是最快生成快照的方式
主數據庫備份完畢後,主數據庫能夠恢復讀寫操做,剩下的操做只需在從服務器上執行便可
mysql>unlock tables;
把主服務器的一致性備份恢復到從數據庫上,能夠把以上文件的壓縮包解壓後放到相應的目錄中
★從服務器配置
修改從服務器的server-id,server-id的值必須是惟一的,不能和主服務器設置的相同,若是有多個從服務器,那麼每一個從服務器必須有本身惟一的server-id值
server-id=2
master-host=192.168.16.100
master-user=user1
master-password=123456
master-port=3306
log-bin=mysql-bin
重啓mysqld服務
rpm包安裝:service mysqld restart
源碼安裝:/usr/local/mysql/bin/mysql_safe --user=mysql &
關掉服務pkill mysqld;kill -9端口號;kill -2進程關閉
查看相應的主從複製進程列表
(1)processlist
mysql>show processlist \G
若是出現
state:waiting for master to send event說明鏈接主數據庫成功,併成功獲取bin-log
state:has read all ready log;waiting for the slave i/o thread to update it
成功執行bin-log日誌,正在等待着去再次鏈接主數據庫並從新獲取bin-log日誌
(2)status
mysql>show slave status\G
若是出現
Slave_IO_Running:Yes說明此進程負責從主服務器上讀取binlog日誌,並寫入從服務器的中繼日誌
Slave_SQL_Running:Yes說明此進程負責讀取而且執行中繼日誌中的binlog日誌
以上兩個都是Yes則表示成功,只要有一個是no,則表示複製進程中止,錯誤緣由能夠在「last_error」字段的值中看到
從數據庫經常使用命令
start slave 啓動複製線程(自動執行)
stop slave 中止複製線程
show slave status 查看從數據庫狀態(查看主從是否鏈接成功)
show master logs 查看主數據庫bin-log日誌
change master to 動態改變到主服務器的配置
show processlist 查看從數據庫運行進程
★常見錯誤:
從服務器沒法同步
Show slave status
顯示Slave_SQL_Running爲no
Seconds_Behind_Master爲null
緣由可能爲:
(1)程序可能在slave上進行了讀寫操做
(2)可能由slave機器重啓後,事務回滾形成的
解決方法:
(1)Mysql>slave stop;
Mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
Mysql>slave start;
(2)Slave庫,Mysql>slave stop;
Master庫,Mysql>show master status;
查看狀態,而後到slave服務器上執行手動同步
mysql>change master to
master_host="192.168.16.100",
master_user="user1",
master_password="123456",
master_port=3306,
master_log_file="mysql-bin.000003",
master_log_pos=98;
啓動slave服務mysql>slave start
經過show slave status查看Slave_SQL_Running爲Yes,Seconds_Behind_Master爲0 即正常