mysql主從及遇到的問題解決
mysql主從及遇到問題解決
1.基于mysql 8.0的docker
2.配置mysql的配置
- 創(chuàng)建master文件夾,并創(chuàng)建my.cnf文件:
[mysqld] ## 設置server_id,注意要在同一局域網(wǎng)內(nèi)唯一 server-id=1 ## 開啟binlog log-bin=mysql-bin ## binlog格式(mixed、statement、row,默認格式是statement) binlog_format=mixed
- 創(chuàng)建slaver文件夾,并創(chuàng)建my.cnf文件
[mysqld] ## 設置server_id,注意要唯一 server-id=2 ## 可以開啟binlog,以備Slave作為其它Slave的Master時使用 #log-bin=mysql-bin ## relay_log配置中繼日志 relay_log=relay-bin ## 如果需要同步函數(shù)或者存儲過程 log_bin_trust_function_creators=true ## binlog格式(mixed、statement、row,默認格式是statement) binlog_format=mixed ## 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷 ## 如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數(shù)據(jù)庫數(shù)據(jù)不一致 slave_skip_errors=1062 ## 跳過主從復制中遇到的錯誤,可配可不配 read-only=1 #1只讀,0讀寫
- 同級可以創(chuàng)建sh文件
#!/bin/sh # $0獲取執(zhí)行命令的文件;realpath獲取真實的路徑;dirname獲取該文件的絕對路徑 script_dir=$(dirname "$(realpath "$0")") docker run -itd --name doyen$1 -p ${2}:3306 -e MYSQL_ROOT_PASSWORD=123456 \ -v ${script_dir}/${1}/my.cnf:/etc/my.cnf \ -v ${script_dir}/${1}/data:/var/lib/mysql \ -v ${script_dir}/${1}/log:/var/log --restart always mysql:8.0
- 分別執(zhí)行sh:
#啟用master容器,master文件名,3306端口 sh mysql.sh master 3306 #啟用slaver容器,slaver文件名,3307端口 sh mysql.sh master 3307
- 登錄master容器
#進入容器,如果失敗使用 sh docker exec -it master bash #登錄mysql mysql -uroot -p123456 use mysql; #可以移除root的所有地區(qū)登錄,只保留能本機登錄 drop user 'root'@'%'; #創(chuàng)建slaver用戶,使用明文密碼連接 create user 'slaver'@'%' identified with mysql_native_password by '123456'; grant replication SLAVE ON *.* TO 'slaver'@'%'; flush privileges; #查看binlog的數(shù)據(jù),用于slaver的偏移量遷移 show master status;
- 登錄slaver服容器
#master_log_file和master_log_pos 為master中show展示的數(shù)據(jù) change master to master_host='master-ip', master_port=3306, master_user='slaver', master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=157; start SLAVE; show slave status\G;
主從mysql完成,Slave_IO_Running
和 Slave_SQL_Running
都為 Yes。
遇到的問題說明
一些博客提示mysql的配置位置不對,導致路徑映射不對,使用默認的配置,引發(fā)serverId都是1,會主從沖突,位置為 /etc/my.cnf,修改配置后需要docker restart。
查詢文件:
docker exec -it container find / -name "my.cnf"
如果slave的change連接master寫錯了,可以執(zhí)行stop slave;reset slave;再重新綁定。
這是重頭開始復制,如果master已經(jīng)運行了一段時間
#master容器:全量dump,--source-data=2表示生成的備份文件中包含 CHANGE MASTER TO 語句 #--single-transaction: 保證備份在一致性點上完成 #--flush-logs: 在備份開始時刷新 MySQL 的二進制日志 #--hex-blob: 處理二進制字段時使用十六進制表示 mysqldump -u root -p --all-databases --source-data=2 --single-transaction --flush-logs --hex-blob > /var/lib/mysql/full-backup.sql #將master的該文件mv到slaver的映射路徑中,進入slaver容器 mysql -u root -p < full-backup.sql #執(zhí)行完后再配置binlog同步點,從sql文件中找出偏移量 CHANGE MASTER TO 。。。 #-------------------------------二。數(shù)據(jù)太多,只dump表結構------- mysqldump -u root -p123456 --no-data --databases your_database > schema-only.sql mysql -u root -p123456 < schema-only.sql start slave;
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
查看本地MYSQL數(shù)據(jù)庫IP地址的三種方法
本文介紹了多種方法來查看連接到本地MySQL服務器的IP地址,括使用SQL查詢從`information_schema.processlist`獲取IP地址,并通過`group by`進行統(tǒng)計,以及通過命令行工具如`mysql`和`awk`進行過濾和計數(shù),這些方法有助于監(jiān)控和管理數(shù)據(jù)庫連接,需要的朋友可以參考下2024-10-10Mysql+Navicat16長期免費直連數(shù)據(jù)庫安裝使用超詳細教程
這篇文章主要介紹了Mysql+Navicat16長期免費直連數(shù)據(jù)庫安裝教程,這里下載的是mysql8版本,第一個安裝包比較小, 第二個安裝包比較大, 因為包含調(diào)試工具,我這里下載的是第一個,詳細介紹跟隨小編一起看看吧2023-11-11