MySQL主從複製是一個異步的複製過程,主庫發送更新事件到從庫,從庫讀取更新記錄,並執行更新記錄,使得從庫的內容與主庫保持一致。mysql
在[mysqld]段下添加:sql
#啓用二進制日誌數據庫 log-bin=mysql-bin安全 #服務器惟一ID,通常取IP最後一段bash server-id=133服務器 |
service mysqld restart併發
mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';運維
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456';異步
#通常不用root賬號,「%」表示全部客戶端均可能連,只要賬號,密碼正確,此處可用具體客戶端IP代替,如192.168.145.226,增強安全。ide
刷新權限
mysql> FLUSH PRIVILEGES;
查看mysql如今有哪些用戶
mysql>select user,host from mysql.user;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 120 | db1 | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set
[mysqld]
server-id=134
錯誤處理: 若是出現此錯誤: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. 由於是mysql是克隆的系統因此mysql的uuid是同樣的,因此須要修改。 |
解決方法: 刪除/var/lib/mysql/auto.cnf文件,從新啓動服務。 |
mysql>change master to master_host='192.168.25.134',master_port=3306,master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=120
注意語句中間不要斷開,master_port爲mysql服務器端口號(無引號),master_user爲執行同步操做的數據庫帳戶,「120」無單引號(此處的120就是show master status 中看到的position的值,這裏的mysql-bin.000001就是file對應的值)。
mysql>start slave;
mysql> show slave status
……………………(省略部分)
Slave_IO_Running: Yes //此狀態必須YES
Slave_SQL_Running: Yes //此狀態必須YES
……………………(省略部分)
注:Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,不然都是錯誤的狀態(如:其中一個NO均屬錯誤)。
Mysql做爲目前世界上使用最普遍的免費數據庫,相信全部從事系統運維的工程師都必定接觸過。但在實際的生產環境中,由單臺Mysql做爲獨立的數據庫是徹底不能知足實際需求的,不管是在安全性,高可用性以及高併發等各個方面。
所以,通常來講都是經過 主從複製(Master-Slave)的方式來同步數據,再經過讀寫分離(MySQL-Proxy)來提高數據庫的併發負載能力 這樣的方案來進行部署與實施的。
首先咱們在前面當中已經運行了mysql-proxy咱們須要先殺死這個進程:sudo killall mysql-proxy
#!bash/bin
/opt/mysql-proxy/bin/mysql-proxy \
--proxy-address=1.0.0.3:4040 \
--proxy-backend-addresses=17.16.15.112:3125 \ #在3125端口的服務器中配置可讀可寫
--proxy-read-only-backend-addresses=172.16.15.112:3126 \ #在3126端口的服務器中配置只讀
--proxy-lua-script=/opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua \ #用這個lua腳原本實現讀寫分離
--log-level=info \
--log-file=/opt/mysql-proxy/logs/mysql-proxy-12.log \ #這是它的日誌
--daemon
3)咱們查看一下日誌,看是否腳本運行成功
sudo vi /opt/mysql-proxy/logs/mysql-proxy-12.log
2017-09-20 03:03:58: (critical) plugin proxy 0.8.5 started
2017-09-20 03:03:58: (message) proxy listening on port 1.0.0.3:4040
2017-09-20 03:03:58: (message) added read/write backend: 17.16.15.112:3125
2017-09-20 03:03:58: (message) added read-only backend: 172.16.15.112:3126
4)獲取鏈接:mysql -uroot -p123456 -h1.0.0.3 -P4040
分析:咱們的用戶名和密碼是使用的是MySQL服務器的用戶名和密碼,由於是要從他們兩個當中獲取鏈接,ip和端口都是使用代理的ip和端口。