MySQL主從配置

序言

在MySQL數據庫中,支持單項、異步複製。在複製過程中,一個服務器充當主服務器,而另外一臺服務器充當從服務器。主服務器會將更新信息寫入到一個特定的二進制文件中。並會維護文件的一個索引用來跟蹤日誌循環。從服務器可以讀取這個日誌並將主服務器中的更改更新到從服務器中,實現同步。主從同步的好處不多說,簡單介紹下。比方說用來實現服務器負載均衡,主服務器用來更新,刪除,新建操作,從服務器用來進行查詢操作;實現數據的異地備份等。

正文

配置環境

主服務器:
OS:Ubuntu14 .04
MySQL:MySQL5.5
IP:192.168.1.101
從服務器1:
OS:Ubuntu14 .04
MySQL:MySQL5.5
IP:192.168.1.102
從服務器2:
OS:Windows7
MySQL:MySQL5.5
IP:192.168.1.103

PS:博主在MySQL版本上遇到一個坑,在Windows7上博主用MySQL5.7做主服務器的時候, Slave_IO_Running: NO,報錯爲:Slave can not handle replication events with the checksum that master 。
查詢得知是由於MySQL5.6以上的版本使用了crc32做binlog的checksum;當一個event被寫入binary log(二進制日誌)的時候,checksum也同時寫入binary log,然後在event通過網絡傳輸到從(slave)之後,再在從服務器中對其進行驗證並寫入從服務器的relay log。
網上解決方法爲進入主服務器的mysql,執行set binlog_checksum =none;
博主試了還是沒有效果,所以將MySQL版本換了5.5,其他小夥伴還是可以試試研究一下的。

1、主服務器配置

1.1修改主服務器的MySQL配置文件

博主實驗,不管是Windows做主服務器還是Ubuntu做主服務,配置都是有效可行的,其中Windows的MySQL的配置文件在C:\ProgramData\MySQL\MySQL Server 5.5下爲my.ini。Ubuntu下MySQL的配置文件在etc/mysql/my.cnf下。
打開MySQL的配置文件,在【mysqld】下添加:

server-id=1  #server-id 服務器唯一標識,一般來說主服務器爲1
log_bin = mysql-bin  #啓動MySQL二進制日誌,日誌名爲mysql-bin,從服務器就是copy這個的變化
log_bin_index = mysql-bin.index
binlog_do_db = test  # 指定記錄二進制日誌的數據庫,就是要備份的數據庫
binlog_ignore_db = mysql  #指定不記錄二進制日誌的數據庫,就是不需要備份的數據庫。

1.2登錄主服務器MySQL創建從服務器用到的賬戶和權限

在主服務器下的MySQL中輸入

GRANT REPLICATION SLAVE ON *.* TO 'test'@'192.168.1.%' IDENTIFIED BY '123456';

‘test’是從服務器登陸的用戶名;‘192.168.1.%’是通配符,表示0-255的IP都可訪問主服務器,如果只有一臺從服務器就可以設定爲指定IP,因爲博主有兩臺從服務器,所以使用通配符;‘123456’是從服務器登陸的認證。

1.3重啓MySQL

在Windows下直接點擊左下角的MySQLmysq,選擇MySQL55-Running,選擇Restart。
在Ubunutu在,打開終端,輸入service mysql restart 等待MySQL重啓完成。

1.4進入MySQL,查看主機狀態

show master status;

主機狀態
記錄File和Position。

2、從服務器配置

2.1配置從服務器my.cnf

在【mysqld】中添加

server-id = 2
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index

2.2重啓Slave從服務器MySQL

service mysql restart

2.3登錄Slave從服務器,連接Master主服務器

change master to master_host='192.168.1.101',master_port=3306,master_user='test',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=107;

master_host對應主服務器的IP地址,master_port對應主服務器的端口,master_log_file對應show master status顯示的File列:mysql-bin.000003,master_log_pos對應Position列:107,否則有可能出現同步失敗。

2.4登錄MySQL狀態下,啓動Slave數據同步

start slave;

2.5登錄MySQL狀態下,查看Slave信息

show slave status\G;

這裏寫圖片描述
Slave_IO_Running和Slave_SQL_Running都爲yes才表示同步成功。
如果Slave_IO_Running和Slave_SQL_Running都爲yes就可以在主服務器上的MySQL進行操作然後查看從服務器上的變化。

2.6.登錄MySQL狀態下,停止同步命令

stop slave;

設置BinaryLog的過期刪除

1、 刪除在指定的日誌或日期之前的日誌索引中的所有二進制日誌。

mysql> PURGE BINARY LOGS TO 'mysql-bin.000020';
Query OK, 0 rows affected (0.10 sec)

刪除mysql-bin.000020之前的日誌。(不包括mysql-bin.000020)

mysql> PURGE BINARY LOGS BEFORE '2017-10-8 23:59:59';  
Query OK, 0 rows affected (0.16 sec)

刪除2017-10-8 23:59:59時間點之前的日誌。

也可以在mysql中設置日誌過期時間

mysql> set global expire_logs_days = 3;
Query OK, 0 rows affected (0.00 sec)

這裏設置過期時間爲3天。

注意事項
在雙機複製環境下,應確保過期天數不應小於從機追趕主機binlog日誌的時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章