關於MySQL5.7開啟bin-log主從復制


主從復制:一般用於實時備份。也可配合mycat,實現讀寫分離。

傳統的基於 ROW的主從復制

簡單說下步驟: master主庫配置同步,slave從庫配置同步,master鎖表/備份,slave恢復數據,slave啟用同步,master解鎖,完成。

##################### mysql5.7 bin-log日志開啟, 必須設置server-id ###################

###############  master 主機
vim /etc/my.cnf  # [mysqld] 部分增加以下配置
server-id=1 #服務器id (主從必須不一樣)
log-bin=mysql-bin # 打開日志(主機需要打開),這個mysql-bin 可自定義,也可加上路徑
binlog-do-db=monitor_db #要給從機同步的庫
binlog-ignore-db=mysql #不給從機同步的庫(多個寫多行)
binlog-ignore-db=mysqlslap
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
expire_logs_days=3 # 自動清理 3 天前的log文件 可根據需要修改
 
         
# 保存退出,重啟mysql服務  service mysqld restart

 

cd /var/lib/mysql           # 可以看到mysql-bin.000001

依次執行下方SQL語句:
show variables like "%log_bin%";  # 查看 log_bin  是否 ON

-- 授權backup用戶可以進行遠程復制
-- grant FILE on *.* to 'backup'@'%' identified by 'backup';
-- grant replication slave on *.* to 'backup'@'%' identified by '123456';
-- flush privileges;
-- use mysql; -- select user,authentication_string,host from user; -- flush tables with read lock; -- 鎖定主數據庫, 防止主從不一致(此時,主數據庫無法再寫入數據) -- show master status; -- ( 如果加 \G 則需要shell中執行) 顯示master信息, 記下FilePosition
 
         
# 然后執行主數據庫備份,並還原到從數據庫。(無法做到主數據庫不停服)

 

###############  slave 從機
vim /etc/my.cnf  # [mysqld] 部分增加以下配置
log-bin=mysql-bin
server-id=2
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysql
replicate-do-db=monitor_db
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60 
 
         
# 保存退出並重啟mysql 並SQL執行以下操作:
-- stop slave;
-- 下面一行替換成實際參數,注意用戶名密碼,以及 master 上拿到的FilePosition
-- change master to master_host='192.168.112.6',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001', master_log_pos=154; -- start slave; -- UNLOCK TABLES; -- 到主庫上執行解鎖主庫
-- show slave status; --顯示slave信息 # master_log_file是 Master 主機 show master status 顯示的File,而master_log_pos是顯示的Position。 # 然后可以通過show slave status查看 slave 中的position和file是否和master中的對應一致。 # 對master數據庫進行CURD,驗證slave庫是否有相應同步

################################ 其它常用操作 ############################
flush logs; -- 刷新日志 生成新的mysql-bin文件,編號增加 show master status; -- 查看二進制日志和Position reset master; --清空bin-log, 從頭開始 mysql-bin.000001 不要隨意執行,slave會當掉。slave上需要重新指定。
 
         
-- 恢復slave方法,在slave機器上操作重新指定
-- stop SLAVE;
-- reset slave;
-- change master to master_host='192.168.112.5',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001', master_log_pos=154; 
-- start slave;

 

使用GTID方式的主從復制

需要給 master / slave 的 my.cnf 文件,在上面已有的配置基礎上,再加2句: 

gtid_mode=ON enforce-gtid-consistency=ON

然后重啟master 的 mysqld服務,修改一下復制用戶的密碼:

-- use mysql;
-- update user set authentication_string=password('backup'), password_expired ='N', password_last_changed=now() where user='backup'; -- 修改密碼root
-- flush privileges;  --刷新

再重啟slave的mysqld服務,然后重新連接master:

-- stop SLAVE;
-- change master to master_host='192.168.112.5',master_user='backup',master_password='backup', master_auto_position=1; -- GTID方式
-- start slave;

此時再執行 show master status; 以及 show slave status;  將得到相同的 Executed_Gtid_set 

若不小心 reset master 了。那么 slave 的恢復連接執行以下方法。(數據的差異可能要手工同步了。)

-- 恢復slave方法
-- reset master; --沒錯,slave上也執行一次。
-- stop SLAVE;
-- reset slave;
-- change master to master_host='192.168.112.5',master_user='backup',master_password='backup', master_auto_position=1; -- GTID方式
-- start slave;

 

啟用slave的多線程復制,修改my.cnf文件,增加以下內容,然后保存重啟mysqld服務.

slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=8 # 8個線程
master_info_repository=TABLE
relay_log_info_repository=TABLE

使用 show PROCESSLIST; 可以看到線程列表。

更多主從復制內容,可參考:https://www.cnblogs.com/uthnb/p/9719800.html    以及  https://www.cnblogs.com/wangdong/p/9808871.html

 

 

其它相關命令

\s    --(僅命令行有效)查看狀態,包括字符集/運行時間/版本/線程數等。

#使用自帶工具來查看bin-log
mysql/bin/mysqlbinlog --no-defaults mysql-bin.000001 |more

#備份數據庫時可以 flush logs; 就會生成新的bin-log
#恢復時間差里沒有備份的數據到test庫
mysql/bin/mysqlbinlog --no-defaults mysql-bin.000002 |/usr/local/mysql/bin/mysql -uroot -p123 test


#備份數據: -F即flush logs; -l是讀鎖, 只能讀不能寫.
mysqldump -uroot -p123 test -l -F > '/tmp/test.sql'

#恢復數據: 先恢復之前的備份,再恢復時間差內的.
mysql -uroot -p123 test < /tmp/test.sql  -- 參數-f是遇到錯誤跳過
mysql/bin/mysqlbinlog --no-defaults mysql-bin.000002 |/usr/local/mysql/bin/mysql -uroot -p123 test

#選擇節點的恢復 即多了起始點的選擇
mysql/bin/mysqlbinlog --no-defaults mysql-bin.000002 --start-position="193" --stop-position="280" |/usr/local/mysql/bin/mysql -uroot -p123 test


show slave status\G # 反轉行列查看,有下面兩列即表示主從同步成功. 
Slave_IO_Running: Yes
Slave_SQL_Running:Yes  

 

若需要修改賬號密碼,則執行:

-- update user set authentication_string=password('root'), password_expired ='N', password_last_changed=now() where user='root'; -- 修改root密碼
-- flush privileges;  --刷新即可生效

 

若需要增大內存利用率,執行下面的set命令,官方建議物理內存的50%~70%   # (adjust value here, 50%-70% of total RAM) 

-- SELECT @@innodb_buffer_pool_size;     -- 查看innodb_buffer_pool_size 
-- SELECT @@innodb_buffer_pool_chunk_size; -- 塊大小,默認128M
-- SELECT @@innodb_buffer_pool_instances;  -- 實例數, 默認8
-- SET GLOBAL innodb_buffer_pool_size=1073741824;  -- 1G
-- SET GLOBAL innodb_buffer_pool_size=8589934592;  -- 8G -- 設置innodb_buffer_pool_size 不必重啟

 若需要重啟服務后依然有效,則需要修改my.cnf文件。 增加一行  innodb_buffer_pool_size = 8G 

 

自帶壓力測試:

######################### 自帶壓力測試 ################################# 
# 在OS的shell下執行命令: 
mysqlslap -hlocalhost -uroot -p123456 -P3306 --concurrency=5000 --iterations=1 --auto-generate-sql --auto-generate-sql-load-type=mixed --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=5000
# 可能需要先修改OS的連接數 ulimit -n 65535 
# 以及mysql的 max_connections  
show variables like '%max_connections%'  -- 最大連接數
set global max_connections=6000;         -- 改變當前進程中的設置. 永久設置需要在my.cnf中加入

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM