最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker搭建Mysql8的主從復(fù)制實(shí)例代碼

 更新時(shí)間:2026年05月09日 11:18:30   作者:優(yōu)秀的顏  
Docker是一種流行的容器化平臺(tái),可以用來(lái)輕松部署、擴(kuò)展和管理各種應(yīng)用程序,使用?Docker?部署?MySQL?8?的主從復(fù)制可以讓你實(shí)現(xiàn)數(shù)據(jù)的備份和讀寫(xiě)分離,提高數(shù)據(jù)庫(kù)的可用性和性能,這篇文章主要介紹了Docker搭建Mysql8的主從復(fù)制,需要的朋友可以參考下

通過(guò)Docker部署Mysql主從復(fù)制,Docker安裝在前篇有,直接演示:

拉取鏡像

# 獲取有哪些鏡像
docker search mysql

# 拉取MySQL鏡像
docker pull mysql:8.0.32

# 查看鏡像
docker images

主節(jié)點(diǎn)的配置

創(chuàng)建數(shù)據(jù)存儲(chǔ)目錄

mkdir -p /docker/mysql/master/data

創(chuàng)建日志目錄

mkdir -p /docker/mysql/master/logs

創(chuàng)建配置文件目錄

mkdir -p /docker/mysql/master/conf

進(jìn)行快速啟動(dòng) - 查看鏡像是否有問(wèn)題 注:不同的版本的配置文件位置不同,可通過(guò)快速創(chuàng)建,查看mysql的對(duì)應(yīng)的配置文件位置,進(jìn)行對(duì)應(yīng)映射。

# 快速啟動(dòng)  -d是進(jìn)行守護(hù)進(jìn)程啟動(dòng)
docker run -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.32
 
# 啟動(dòng)成功后,進(jìn)入容器內(nèi)部拷貝配置文件,到宿主主機(jī)
docker cp  mysql8:/etc/mysql /docker/mysql/master/conf
 
# 刪除剛才的容器,重新創(chuàng)建容器
docker stop mysql8
docker rm mysql8

運(yùn)行容器

docker run -p 3340:3306 --name mysql_master --privileged=true \
-v /docker/mysql/master/conf:/etc/mysql/conf.d \
-v /docker/mysql/master/logs:/var/log/mysql \
-v /docker/mysql/master/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.32 --init-connect="SET collation_connection=utf8mb4_0900_ai_ci" --init-connect="SET NAMES utf8mb4" --skip-character-set-client-handshake 

進(jìn)入容器

docker ps -a
docker exec -it mysql_master /bin/bash
docker exec -it mysql_master env LANG=C.UTF-8 /bin/bash # 進(jìn)入容器,這種進(jìn)入避免顯示中午亂碼

# 打開(kāi)MySQL,輸入密碼
mysql -uroot -p
# 查看數(shù)據(jù)庫(kù)
show databases;
# 創(chuàng)建數(shù)據(jù)庫(kù)
create database 數(shù)據(jù)庫(kù);

# 如果遠(yuǎn)程鏈接失敗,可以修改默認(rèn)密碼校驗(yàn)方式(第三方工具可以連接上)
ALTER USER 'root'@'%' IDENTIFIED  WITH mysql_native_password BY '密碼';

配置遠(yuǎn)程連接(對(duì)外連接的)

# 在MySQL下執(zhí)行
use mysql;
# 創(chuàng)建對(duì)外訪問(wèn)的用戶和權(quán)限
CREATE USER '用戶名'@'%' IDENTIFIED WITH mysql_native_password BY '密碼';
# 授權(quán)全部的權(quán)限(范圍大)
# GRANT ALL ON *.* TO '用戶名'@'%' WITH GRANT OPTION;
# 刷新權(quán)限
FLUSH PRIVILEGES;

# 退出
exit

創(chuàng)建自定義的配置文件(主服務(wù)器配置文件)

cd /docker/mysql/master/conf
touch my.cnf

my.cnf文件內(nèi)容:

[client]
# mysql客戶端默認(rèn)字符集
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 跳過(guò)密碼登錄
#skip-grant-tables
#bind-address = 127.0.0.1
init_connect='SET collation_connection = utf8mb4_general_ci'
init_connect='SET NAMES utf8mb4'
# mysql服務(wù)端默認(rèn)字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake
# datadir=/var/lib/mysql  

# 主服務(wù)器唯一ID 默認(rèn)是1
server-id=1
# 設(shè)置不要復(fù)制的數(shù)據(jù)庫(kù)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 設(shè)置需要復(fù)制的數(shù)據(jù)庫(kù)(先創(chuàng)建好)
binlog-do-db=數(shù)據(jù)庫(kù)名
# 啟用二進(jìn)制日志,日志的存放地址(默認(rèn)是binlog),就是在show master status;看到Filed名字
log-bin=/var/lib/mysql/mysql-bin
# 主機(jī),1 只讀 0 讀寫(xiě)(默認(rèn)是0)
read-only=0
# 設(shè)置logbin格式 有3種格式 
# STATEMENT(函數(shù)支持不好) 寫(xiě)指令,會(huì)出現(xiàn)主從數(shù)據(jù)不同步,now()函數(shù)
# ROW(行模式大量修改效率不行,但支持存儲(chǔ)引擎) - 默認(rèn)的
# MIXED (綜合,推薦)
binlog_format=mixed
## 跳過(guò)主從復(fù)制中遇到的所有錯(cuò)誤或指定類型的錯(cuò)誤,避免slave端復(fù)制中斷。
## 如:1062錯(cuò)誤是指一些主鍵重復(fù),1032錯(cuò)誤是因?yàn)橹鲝臄?shù)據(jù)庫(kù)數(shù)據(jù)不一致
slave_skip_errors=1062
# 二進(jìn)制日志過(guò)期清理時(shí)間,默認(rèn)是0(不自動(dòng)清理)
expire_logs_days=7
# 單個(gè)二進(jìn)制日志大小
max_binlog_size=200M
# 設(shè)置每隔多少次事務(wù)提交操作,將這些操作寫(xiě)入二進(jìn)制日志文件
sync_binlog=1
# 使用mysql_native_password插件的認(rèn)證
# default_authentication_plugin=mysql_native_password

重啟mysql容器

docker ps -a
docker restart 容器id

創(chuàng)建用戶并授權(quán)給從機(jī)

主機(jī)創(chuàng)建用戶:

# 連接上Mysql服務(wù),執(zhí)行
create user '用戶名'@'%' identified with mysql_native_password by '密碼';
# 授權(quán)復(fù)制的權(quán)限 ON后的*.*代表全部的庫(kù)和表
GRANT REPLICATION SLAVE ON *.* TO '用戶名'@'%';
# 刷新權(quán)限
FLUSH PRIVILEGES;

# 如果遠(yuǎn)程鏈接失敗,可以修改默認(rèn)密碼校驗(yàn)方式(第三方工具可以連接上)
alter user '用戶名'@'%' identified with mysql_native_password by '密碼';

查詢主機(jī)的狀態(tài):

show master status;
# 執(zhí)行上面命令,得到 File(binlog日志) Position(接入點(diǎn)) Binlog_Do_DB(要復(fù)制的數(shù)據(jù)庫(kù)) Binlog_IgnoreDB()
# 需要記錄一下File、Position

從節(jié)點(diǎn)配置

創(chuàng)建數(shù)據(jù)目錄

mkdir -p /docker/mysql/slave/data

創(chuàng)建日志目錄

mkdir -p /docker/mysql/slave/logs

創(chuàng)建配置文件目錄

mkdir -p /docker/mysql/slave/conf

創(chuàng)建自定義的配置文件

cd /docker/mysql/slave/conf
touch my.cnf

mysql.cnf文件內(nèi)容:

[client]
# mysql客戶端默認(rèn)字符集
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 跳過(guò)密碼登錄
#skip-grant-tables
#bind-address = 127.0.0.1
init_connect='SET collation_connection = utf8mb4_general_ci'
init_connect='SET NAMES utf8mb4'
# mysql服務(wù)端默認(rèn)字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake
# datadir=/var/lib/mysql  

# 從服務(wù)器唯一ID
server-id = 2  
# 開(kāi)啟中繼日志
relay-log=mysql-relay
# 從機(jī),1 只讀 0 讀寫(xiě)(默認(rèn)是0)
read-only=1
# 啟用二進(jìn)制日志,日志的存放地址,如果從機(jī)變成主機(jī)可以繼續(xù)使用bin日志
# log-bin=mysql-slave-bin
# 使用mysql_native_password插件的認(rèn)證
# default_authentiction_plugin=mysql_native_password

運(yùn)行容器

docker run -p 3341:3306 --name mysql_slave --privileged=true \
-v /docker/mysql/slave/conf:/etc/mysql/conf.d \
-v /docker/mysql/slave/logs:/var/log/mysql \
-v /docker/mysql/slave/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.32 --init-connect="SET collation_connection=utf8mb4_0900_ai_ci" --init-connect="SET NAMES utf8mb4" --skip-character-set-client-handshake 

進(jìn)入容器

docker ps -a
docker exec -it mysql_slave /bin/bash

配置遠(yuǎn)程連接(對(duì)外連接的)

# 打開(kāi)MySQL,輸入密碼
mysql -uroot -p
# 查看數(shù)據(jù)庫(kù)
show databases;
# 創(chuàng)建數(shù)據(jù)庫(kù)
create database 數(shù)據(jù)庫(kù);
# 查看數(shù)據(jù)庫(kù)
# 在MySQL下執(zhí)行
use mysql;
# 創(chuàng)建對(duì)外訪問(wèn)的用戶和權(quán)限
CREATE USER '用戶名'@'%' IDENTIFIED BY '密碼';
GRANT ALL ON *.* TO '用戶名'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

# 退出
exit

設(shè)置同步信息

# 停止同步(之前配置過(guò),需要執(zhí)行)
stop slave;

# 設(shè)置同步
CHANGE MASTER TO MASTER_HOST='主機(jī)IP地址',
MASTER_PORT=端口,
MASTER_USER='主機(jī)用戶',MASTER_PASSWORD='主機(jī)用戶的密碼',
MASTER_LOG_FILE='binlog日志名字',
MASTER_CONNECT_RETRY=30,
MASTER_LOG_POS=具體的接入點(diǎn)值;

# MASTER_CONNECT_RETRY 是如果連接失敗,重試時(shí)間間隔,默認(rèn)60秒

如果操作失敗,需要重新配置,執(zhí)行下面2個(gè)命令

stop slave;    # 停止同步操作
reset master;  # 重置主從配置,刪除之前的中繼日志,會(huì)再生成一份新的

開(kāi)始同步

start slave;

檢查是否成功

show slave status \G;  # 檢查狀態(tài)
# 如果結(jié)果下面的字段為Yes 代表配置成功
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes

停止和重置

# 從機(jī)上執(zhí)行,停止I/O 線程和SQL線程的操作
stop slave; 

# 從機(jī)上執(zhí)行,用于刪除SLAVE數(shù)據(jù)庫(kù)的relaylog日志文件,并重新啟用新的relaylog文件
reset slave;

# 主機(jī)上執(zhí)行,刪除所有的binglog日志文件,并將日志索引文件清空,重新開(kāi)始所有新的日志文件
reset master;

驗(yàn)證

# 從主機(jī)上,創(chuàng)建表、插入SQL語(yǔ)句
# 創(chuàng)建表
CREATE TABLE `emp` (
  `id` int(11) NOT NULL COMMENT '主鍵',
  `name` varchar(255)  DEFAULT NULL COMMENT '員工名',
  `age` int(11) DEFAULT NULL COMMENT '年齡',
  `did` int(11) DEFAULT NULL COMMENT '部門id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='部門表';
INSERT INTO emp (`id`, `name`, `age`, `did`) VALUES (1, '劉備', 55, 1);
# 分別 在主機(jī)和從機(jī)進(jìn)行查詢?cè)揝QL語(yǔ)句
select * from  emp;
# 如:都看到相同的數(shù)據(jù),代表成功

常見(jiàn)問(wèn)題

啟動(dòng)主從同步后,常見(jiàn)錯(cuò)誤是Slave_IO_Running: No 或者 Connecting 的情況,此時(shí)查看下方的 Last_IO_ERROR錯(cuò)誤日志,根據(jù)日志中顯示的錯(cuò)誤信息在網(wǎng)上搜索解決方案即可

一 常見(jiàn)錯(cuò)誤:

`Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size'`

解決:

-- 在從機(jī)停止slave
SLAVE STOP;

-- 在主機(jī)查看mater狀態(tài)
SHOW MASTER STATUS;
-- 在主機(jī)刷新日志
FLUSH LOGS;
-- 再次在主機(jī)查看mater狀態(tài)(會(huì)發(fā)現(xiàn)File和Position發(fā)生了變化)
SHOW MASTER STATUS;
-- 修改從機(jī)連接主機(jī)的SQL,并重新連接即可

二:?jiǎn)?dòng)docker容器后提示 WARNING: IPv4 forwarding is disabled. Networking will not work.

解決:

#修改配置文件:
vim /usr/lib/sysctl.d/00-system.conf
#追加
net.ipv4.ip_forward=1
#接著重啟網(wǎng)絡(luò)
systemctl restart network

總結(jié) 

到此這篇關(guān)于Docker搭建Mysql8主從復(fù)制的文章就介紹到這了,更多相關(guān)Docker搭建Mysql8主從復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

长春市| 上高县| 河津市| 平江县| 河北省| 静海县| 桃园市| 渭南市| 周至县| 天柱县| 台中县| 广州市| 开原市| 闸北区| 图们市| 壶关县| 昌都县| 上蔡县| 梁山县| 海盐县| 新和县| 武胜县| 柳林县| 云安县| 林甸县| 绵竹市| 福海县| 临清市| 海伦市| 确山县| 红原县| 永昌县| 金寨县| 嘉峪关市| 伊吾县| 来安县| 始兴县| 綦江县| 嘉黎县| 沐川县| 兴文县|