MySQL主从同步


关注公众号 青烟雀语 回复“主从” 获取md源文件

安装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与从库一致,则证明主从同步

关注公众号 青烟雀语 回复“主从” 获取md源文件
转载请注明出处

相关