Mysql數據庫主從同步



說明

主數據庫服務主機:xxx.xx.xxx.1

從數據庫服務主機:xxx.xx.xxx.2


第一步

賦權,在主服務器中增加從服務同步用戶的權限,參考腳本如下,xxx.xx.xxx.2爲從服務期ip:

GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TOuslave@"xxx.xx.xxx.2" IDENTIFIED BY 'password' WITH GRANT OPTION;

第二步
複製主服務器數據文件:需要先做讀鎖-->然後記錄主服務器狀態(同步時候有用)-->複製文件-->解除讀鎖。
1、在主服務器設置只讀鎖:FLUSH TABLES WITH READ LOCK;
2、查看並記錄主服務狀態:show master status; 
+---------------------+----------+--------------+------------------+-------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------------+----------+--------------+------------------+-------------------+
| mysqlbin-log.000002 |  7607264 |              |                  |                   |
+---------------------+----------+--------------+------------------+-------------------+
redolog.010 | 408042533 需要記住binlog文件名和執行的位置。並持續查看,確認數據保持不變(讀鎖生效)

3、把主服務器數據庫文件打包: tar -zcvf mysqlmain.tar.gz ./data/




4、打包完成,解除讀鎖:UNLOCK TABLES
把打包的主服務的數據文件復解制到從服務器數據目錄並壓(用BeyongCompare拷貝時注意slave主機的訪問權限),確保文件所有者爲啓動MYSQL的用戶(kkdba:kkdba)

解壓:
tar zxvf /path/to/mysql-VERSION-OS.tar.gz
然後啓動slave,記得啓動時加上skip-slave-start選項,使之不會立刻去連接master
/app/mysqltdms/bin/mysqld_safe --defaults-file=/app/mysqltdms/my.cnf --basedir=/app/mysqltdms --datadir=/app/mysqltdms/data --pid-file=/app/mysqltdms/mysqld.pid --user=mysql --skip-slave-start


設置並啓動同步
1、先停止同步:stop slave; #不需要 --skip-slave-start 這個參數未啓動slave

2、變更同步主服務器:CHANGE MASTER TO MASTER_HOST='xx.xx.xx.1',MASTER_PORT=3306,MASTER_USER='uslave',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysqlbin-log.000010',MASTER_LOG_POS=798859980;

3、啓動同步:start slave;

4、啓動後查看同步狀態:show slave status\G
會得到類似下面的列表,都爲Yes說明主從複製成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes



====服務器配置====
>vi my.conf #master
server-id=1 //服務器ID不能重複
log-bin=/log/mysql/mysql-bin //開啓MYSQL二進制日誌 ,指定到文件
binlog-do-db=dbname //需要複製的數據庫名,如果複製多個數據庫,重複設置這個選項即可 
binlog-ignore-db=dbname //不需要複製的數據庫苦命,如果複製多個數據庫,重複設置這個選項即可
expire-logs-days = 7 //只保留7天的二進制日誌,以防磁盤被日誌佔滿

>vi my.conf #slave
[mysqld] 
server-id=2 //服務器ID不能重複
master-host=主機
master-user=用戶名
master-password=密碼
master-port=端口
replicate-do-db=需要複製的數據庫名,如果複製多個數據庫,重複設置這個選項即可
replicate-ignore-db=需要複製的數據庫名,如果複製多個數據庫,重複設置這個選項即可
replicate-ignore-table=dzx2.pre_common_session //自動跳過的表,session表沒必要做複製
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396,1064 //自動跳過的錯誤代碼,以防複製出錯被中斷


====錯誤列表====
1062: Duplicate entry '115846' for key 'PRIMARY'' on ...
>stop slave;
>set global sql_slave_skip_counter=1;
>start slave;

Last_IO_Errno: 1593
Last_IO_Error: 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.
--複製導致了 datadir/auto.cnf 文件記錄的server-id與主服務器一樣,修改主服務器或者從服務器的隨便一個server-id更改掉 重啓服務 同步成功


====取消主從同步====
mysql> slave stop;
mysql>reset slave;
mysql>change master to master_user='', master_host='', master_password='';
結果報錯如下:
ERROR 1210 (HY000): Incorrect arguments to MASTER_HOST
解決辦法如下:
mysql>change master to master_host=' ';
即可成功刪除同步用戶信息。
注意:上面的命令報錯的原因,爲master_host=' ' 裏面必須有內容,即使爲空,也應該用空格代替,而不能什麼都不寫。

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