天天看點

配置MySql主從同步一.安裝環境二.Master的配置三.Slave的配置四.參考文檔五.遇到的問題六.名詞解釋

文章目錄

  • 一.安裝環境
  • 二.Master的配置
    • 2.1 修改配置檔案
    • 2.2 重新開機MySql
    • 2.3 登入MySql
    • 2.4 建立帳戶并授權slave
    • 2.5 顯示主庫資訊
  • 三.Slave的配置
    • 3.1 修改配置檔案
    • 3.2 重新開機MySql
    • 3.3 登入MySql
    • 3.4 配置從伺服器
    • 3.5 啟動從伺服器複制功能
    • 3.6 檢查從伺服器複制功能狀态
  • 四.參考文檔
  • 五.遇到的問題
  • 六.名詞解釋

一.安裝環境

Mysql安裝教程見CentOS筆記

作業系統:CentOS 6或者7

資料庫版本:MySql 5.6或者Mysql 5.7[最好保持一緻,不一緻也不要相差太大,5.6作為一個分界點,上下相差有些大,建議不要跨;如果版本不一緻,官方說master的版本低于slave的版本沒什麼問題,但是反過來就會有很多問題。原因是比如新版本有一些功能老版本不支援,然後master上執行了這些操作,同步到slave上就會有問題。]

記得開放資料庫端口

二.Master的配置

2.1 修改配置檔案

  1. 修改mysql配置檔案
#linux
vi /etc/my.cnf
#windows
修改my.ini檔案
           
  1. 在該檔案下[mysqld]中指定Master的配置如下:
#伺服器唯一ID,一般取IP最後一段
server-id=138
#主從複制的資料庫的名字,不設定表示發送所有,多個用逗号隔開
#binlog-do-db=master
#忽略mysql資料庫,多個用逗号隔開
binlog-ignore-db=information_schema,performance_schema,mysql
#啟用二進制日志,主庫必須開啟
log-bin=mysql-bin
#skip-name-resolve
#binlog過期清理時間
#expire_logs_days = 7
#binlog每個日志檔案大小
#max_binlog_size 100m

           

2.2 重新開機MySql

#linux
service mysqld restart
#windows
net stop mysql
net start mysql
           

2.3 登入MySql

mysql [-h host] -u username -p
輸入對應的密碼
或
mysql [-hhost] -uusername -ppassword
直接登入
           

2.4 建立帳戶并授權slave

  1. 建立帳戶并授權
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,加強安全。

2. 重新整理權限

mysql> FLUSH PRIVILEGES;
           

2.5 顯示主庫資訊

mysql>show master status;
+------------------+----------+--------------+--------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin.000005 |     5772 | mstest       | information_schema,mysql |                   |
+------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)
           
這裡的 File 、Position是在配置Salve的時候要使用到的,Binlog_Do_DB表示要同步的資料庫,Binlog_Ignore_DB表示Ignore的資料庫,這些都是在配置的時候進行指定的。

三.Slave的配置

3.1 修改配置檔案

  1. 修改mysql配置檔案
#linux
vi /etc/my.cnf
#windows
修改my.ini檔案
           
  1. 在該檔案下[mysqld]中指定Slave的配置如下:
#伺服器唯一ID,一般取IP最後一段
server-id=134
#跳過所有錯誤
slave-skip-errors=all
#該選項告訴從伺服器将其SQL線程執行的更新記入到從伺服器自己的二進制日志。用于鍊式複制伺服器或者從伺服器用來做增量備份
#log_slave_updates = 1
#設定需要複制的資料庫(多資料庫使用逗号,隔開)
#replicate-do-db    
#如果庫名不同,使用這個。
replicate-rewrite-db = kintech_pd -> kps_common
#忽略mysql資料庫,多個用逗号隔開
#replicate-ignore-db 
#設定需要複制的表
#replicate-do-table  
#設定需要忽略的複制表 
#replicate-ignore-table 
#同replication-do-table功能一樣,但是可以通配符
#replicate-wild-do-table 
#同replication-ignore-table功能一樣,但是可以加通配符
#replicate-wild-ignore-table 
           

3.2 重新開機MySql

#linux
service mysqld restart
#windows
net stop mysql
net start mysql
           

3.3 登入MySql

mysql [-h host] -u username -p
輸入對應的密碼
或
mysql [-hhost] -uusername -ppassword
直接登入
           

3.4 配置從伺服器

mysql>change master to master_host='192.168.137.16',master_port=3306,master_user='backup',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=120;
           
注意語句中間不要斷開,master_port為mysql伺服器端口号(無引号),master_user為執行同步操作的資料庫賬戶,“120”無單引号(此處的120就是show master status 中看到的position的值,這裡的mysql-bin.000001就是file對應的值)。

3.5 啟動從伺服器複制功能

Mysql>start slave;
           

3.6 檢查從伺服器複制功能狀态

mysql> show slave status\G;
           

注:Slave_IO及Slave_SQL程序必須正常運作,即YES狀态,否則都是錯誤的狀态(如:其中一個NO均屬錯誤)。

……………………(省略部分)
Slave_IO_Running: Yes //此狀态必須YES
Slave_SQL_Running: Yes //此狀态必須YES
……………………(省略部分)
           

四.參考文檔

Mycat實作Mysql主從複制和讀寫分離

MySQL5.6 資料庫主從(Master/Slave)同步配置詳解

mysql主從隻同步部分庫或表

Mysql資料庫之Binlog日志使用總結

五.遇到的問題

  • Slave_IO_Running: No

    mysql版本不一緻的問題,官方說master的版本低于slave的版本沒什麼問題,但是反過來就會有很多問題。原因是比如新版本有一些功能老版本不支援,然後master上執行了這些操作,同步到slave上就會有問題。

  • Unknown system variable ‘binlog_checksum’

    查找得知 binlog_checksum 隻在mysql5.6.2以上版本出現,低于以下版本的情況下為binlog_checksum=none

六.名詞解釋

  • 中繼日志[relay log]

relay log很多方面都跟binary log差不多.

從伺服器I/O線程将主伺服器的二進制日志讀取過來記錄到從伺服器本地檔案,然後SQL線程會讀取relay-log日志的内容并應用到從伺服器,進而使從伺服器和主伺服器的資料保持一緻.說白了就是主伺服器的bin-log檔案流讀過來再存在本地,換個名字.

繼續閱讀