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源文件
转载请注明出处