暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL主从同步(docker)

青烟雀语 2021-11-20
228

安装docker

本文基于centos8.2自测7.5版本同样可用

sudo yum update(可选)
复制

安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
复制

设置yum源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
复制

安装docker

sudo yum install docker-ce
复制

启动并加入开机启动

sudo systemctl start docker
sudo systemctl enable docker
复制

验证安装是否成功

docker version
复制

安装portainer

可视化docker工具(可选)

docker pull portainer/portainer
复制
docker run -d -p 9000:9000 --name=portainer --restart=always -v var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
复制

安装后 IP:9000访问。本地选择local设置密码即可

安装MySQL(主从)

拉镜像

docker pull mysql5.7
复制

启动容器  -v 为本地服务器:容器内路径的映射  -e为环境变量

docker run -itd --name mysql-5.7 \
-v root/mysql/conf:/etc/mysql \
-v /root/mysql/logs:/var/log/mysql \
-v /root/mysql/data:/var/lib/mysql \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=asdf-123 \
-e TZ=Asia/Shanghai mysql:5.7
复制

启动从库  因为本次为同一台公网机器,所以设置从库为3307

docker run -itd --name mysql-5.7slave \
-v /root/mysqlSlave/conf:/etc/mysql \
-v /root/mysqlSlave/logs:/var/log/mysql \
-v /root/mysqlSlave/data:/var/lib/mysql \
-p 3307:3306 -e MYSQL_ROOT_PASSWORD=asdf-123 \
-e TZ=Asia/Shanghai mysql:5.7
复制

进入容器内部

docker exec -i -t  mysql-5.7  /bin/bash
复制

在主库容器内新建my.cnf,输入命令后,粘贴以下配置,CTRL+D即可保存退出

cd etc
cat >>my.cnf
复制
#mysql master1 config 
[mysqld]
server-id = 1 # 节点ID,确保唯一
# log config
log-bin = mysql-bin #开启mysql的binlog日志功能
sync_binlog = 1 #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
binlog_format = mixed #binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days = 7 #binlog过期清理时间
max_binlog_size = 100m #binlog每个日志文件大小
binlog_cache_size = 4m #binlog缓存大小
max_binlog_cache_size= 512m #最大binlog缓存大
binlog-ignore-db=mysql #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行

auto-increment-offset = 1 # 自增值的偏移量
auto-increment-increment = 1 # 自增值的自增量
slave-skip-errors = all #跳过从库错误
#skip-name-resolve #mysql默认会反向解析DNS,对于访问者不会判断是hosts还是ip都会进行dns反向解析
复制
exit  退出当前容器
复制

重复以上步骤在从库新建my.cnf

[mysqld]
server-id = 2
log-bin=mysql-bin
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%
复制
sudo service docker restart 重启两个容器
复制

用此命令获取从库IP

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql-5.7slave
复制

连接MySQL(主)master

CREATE USER repl_user IDENTIFIED BY 'repl_passwd';
grant replication slave on *.* to 'repl_user'@' 172.17.0.3' identified by 'repl_passwd';
# 从库的IP
FLUSH PRIVILEGES;
show master status;
复制

获得File  mysql-bin.000001  Position  3173

连接MySQL(从)slave

CHANGE MASTER TO
MASTER_HOST = '172.17.0.4',
MASTER_USER = 'repl_user',
MASTER_PASSWORD = 'repl_passwd',
MASTER_PORT = 3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=3173,
MASTER_RETRY_COUNT = 60,
MASTER_HEARTBEAT_PERIOD = 10000;
# MASTER_LOG_FILE='mysql-bin.000001',#与主库File 保持一致
# MASTER_LOG_POS=120 , #与主库Position 保持一致
start slave;
#注意:MySQL5.7之前为slave start命令
复制

验证在slave库执行

show slave status;
复制

主库File和position与从库一致,则证明主从同步



文章转载自青烟雀语,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论