mysql主從同步備份 網站有一個後台業務,叫searchEngine項目,基於Lucene 構建。主要提供索引構建和檢索的功能,搜索引擎查詢mysql 數據庫然後根據數據狀態來構建索引,這裡采用的是 程序每隔一段時間主動輪詢 mysql 查詢 數據列 增刪改的狀態,對應的去增刪改 Lucene 索引,然後會將索引的狀態更新到數據列中,方便輪詢的時候區分哪些是未索引的數據。 由於mysql主要采用myisam引擎,導致java程序構建索引 輪詢數據庫的時候,頻繁鎖表,頁面查詢的時候無法響應。這裡做了下 mysql 主從同步,將所有業務上的更新和查找在 master 上進行,而Lucene後台服務操作slave庫,同時也起到備份的作用。這裡整理下做主從備份的一些配置。 主庫 master:192.168.0.102,mysql 5.6.12,centos 從庫 slave:192.168.0.100,mysql 5.5.13,centos 都是采用源碼編譯,安裝過程可以查看我的這篇博文http://www.BkJia.com/database/201306/221828.html。master、slave 所有的數據表結構都一致。之前我做了一個雙master 的配置,可以查看這裡http://www.BkJia.com/database/201306/221828.html 1. master 配置 這裡的配置只截取了部分 同步需要的配置,其他的優化方面的暫不考慮 my.cnf: 01 [client] 02 port=3306 03 [mysqld] 04 socket=/usr/local/mysql/mysql.sock 05 basedir=/usr/local/mysql 06 datadir=/usr/local/mysql/data 07 log-error=/usr/local/mysql/data/mysql_error.log 08 pid-file=/usr/local/mysql/data/mysql.pid 09 log-bin = /usr/local/mysql/mysql-bin.log #二進制文件必須開啟 10 explicit_defaults_for_timestamp=true 11 innodb_flush_log_at_trx_commit=2 #日志flush到磁盤的,2表示寫入到緩存,提高性能,操作系統崩潰會丟失部分數據 12 #master 13 server_id=1 14 expire_logs_days = 10 15 max_binlog_size = 1G 16 binlog-do-db = webportal #同步數據庫 17 binlog-ignore-db=information_schema 18 binlog-ignore-db=performance_schema 19 binlog-ignore-db=mysql 20 binlog-ignore-db=test 創建同步用戶,在主服務器上為從服務器建立一個連接帳戶,該帳戶必須授予REPLICAITON SLAVE權限。在主服務器登陸mysql上執行 1 grant replication slave on *.* to 'replication'@'192.168.0.100' identified by '123456'; 注: [email protected]這裡是客戶端的ip 可以使用 % 代替,表示允許任意的客戶端,例如: 192.168.0.% 。表示該段地址的主機都可作為客戶端。 查看master 狀態: 1 mysql> show master status\G; 2 *************************** 1. row *************************** 3 File: mysql-bin.000001 4 Position: 416 5 Binlog_Do_DB: webportal 6 Binlog_Ignore_DB: information_schema,performance_schema,mysql,test 7 Executed_Gtid_Set: 8 1 row in set (0.00 sec) 注意上面的 File 和 Position :slave 配置的時候會使用。 2. slave配置 1 [mysqld] 2 server_id=2 3 log-bin=mysql-bin.log 4 replicate-do-db=webportal 用change master語句指定同步位置 1 mysql>change master to master_host='192.168.0.102', master_user='replication', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=525; 2 3 注:master_log_file,master_log_pos由上面master查出的狀態值中確定。master_log_file對應File,master_log_pos對應Position。 啟用slave; 1 start slave; 關閉slave; 1 stop slave; 查看狀態: 1 show slave status; 這裡出現了這樣一個錯誤: Last_IO_Error: Got fatal error 1236 from master when reading data from >> binary log: 'Slave can not handle replication events with the checksum that >> master is configured to log; the first event 'mysql-bin.000001' 這是由於 master 用的 mysql5.6 , binlog_checksum 默認設置的是 crc32。 如果slave用的 5.5 或者更早的版本,請將master的 binglog_checksum設置為 none。 binlog_checksum=none 重啟master : ./mysqld restart 查看slave :show slave status\G; 01 mysql> show slave status\G; 02 *************************** 1. row *********** 03 Slave_IO_State: Waiting for mas 04 Master_Host: 192.168.0.102 05 Master_User: replication 06 Master_Port: 3306 07 Connect_Retry: 60 08 Master_Log_File: mysql-bin.00000 09 Read_Master_Log_Pos: 120 10 Relay_Log_File: YZ-relay-bin.00 11 Relay_Log_Pos: 266 12 Relay_Master_Log_File: mysql-bin.00000 13 Slave_IO_Running: Yes #必須為yes 14 Slave_SQL_Running: Yes #必須為yes 15 Replicate_Do_DB: webportal 16 Replicate_Ignore_DB: 17 Replicate_Do_Table: 18 Replicate_Ignore_Table: 19 Replicate_Wild_Do_Table: 20 Replicate_Wild_Ignore_Table: 21 Last_Errno: 0 22 Last_Error: 23 Skip_Counter: 0 24 Exec_Master_Log_Pos: 120 25 Relay_Log_Space: 419 26 Until_Condition: None 27 Until_Log_File: 28 Until_Log_Pos: 0 29 Master_SSL_Allowed: No 30 Master_SSL_CA_File: 31 Master_SSL_CA_Path: 32 Master_SSL_Cert: 33 Master_SSL_Cipher: 34 Master_SSL_Key: 35 Seconds_Behind_Master: 0 36 Master_SSL_Verify_Server_Cert: No 37 Last_IO_Errno: 0 38 Last_IO_Error: 39 Last_SQL_Errno: 0 40 Last_SQL_Error: 41 Replicate_Ignore_Server_Ids: 42 Master_Server_Id: 1 43 1 row in set (0.00 sec) 注:Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。