mysql主從複製

版本mysql-5.7.25-linux-glibc2.12-x86_64.tar.gzhtml

原理:主從複製涉及三個線程,主庫dump_log線程負責把主庫的bin.log的文件名跟位置點跟文件發給從庫,從庫I/O線程把主庫的bin.log文件名跟位置點記錄在從庫的master.info裏面,而且把獲取到的文件改爲replay.bin.log文件,從庫的SQL線程把replay.bin.log文件翻譯成sql語句,執行,並把目前爲止執行過的replay.bin.log文件名跟位置點保存在replay.info裏面mysql

步驟:1,主庫先開啓log-bin功能並修改server-id的值確保在局域網內惟一(/etc/my.cnf/mysqld)生成日誌linux

           2,主庫受權用戶複製權限,讓從庫可以來主庫獲取日誌,GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.8.11' identified by 'test123456' 注意,@後面是否能夠改爲網段或者%有待驗證sql

           3,使用mysqldump -u -p -B 數據庫名稱 --master-data=1 --events > *.sql 注意:-B是導入數據庫時不用先建庫,--master-data=1是當備份數據庫時進行短暫鎖庫,並記錄下來change master to的數值,方便從庫執行change master to時不用指定主庫binlog日誌的名稱跟位置點,由於加了這個參數後,導出的備份數據裏面已加有日誌名稱跟位置點,還有導出備份時最好不要把mysql默認的庫也導出來(試過導出並導入從庫中,從庫的主從複製狀態一直不對,後面沒導出默認數據庫就成功了),何況當沒有指定只同步指定數據庫時,默認會同步全部數據庫。數據庫

           4,拷貝備份文件到從庫並導入文件scp -P端口 文件 用戶@從庫IP:/目錄      mysql -u -p < *.sql服務器

           5,進入從庫執行change master to語句 CHANGE MASTER TO MASTER_HOST='172.16.2.10', MASTER_PORT=3306, MASTER_USER='rep', MASTER_PASSWORD='oldboy123';ide

           6,檢查從庫狀態 show slave status\G;當Slave_IO_Running: Yes   Slave_SQL_Running: Yes兩個yes後即成功.net

生產環境下通常不會同步一些庫不一樣步一些庫,只會在同步時忽略一些表:線程

binlog-do-db:要同步的數據庫名翻譯

還能夠顯示 設置不一樣步的數據庫:

binlog-ignore-db = mysql 不一樣步mysql庫和test庫
binlog-ignore-db = test

錯誤排查:MySQL同步故障:" Slave_SQL_Running:No" 兩種解決辦法  https://blog.csdn.net/heng_ji/article/details/51013710

mysql錯誤代碼表:https://www.cnblogs.com/JimCalark/p/7808575.html

忽略從庫同步數據時錯誤代碼 slave_skip_errors = 1007,1062,1032(/etc/my.cnf/mysqld)

 從庫開啓bin-log分兩種狀況:

a,從庫作其餘服務器的主庫(即級聯)

b,從庫作備份服務器

開啓方法:在my.cnf下面的mysqld模塊下增長log-slave-updates  expire_logs_days=7(刪除七天前的log日誌)

相關文章
相關標籤/搜索