基于Docker搭建MySQL主从复制
Docker安装
docker安装请参考我之前的文章:https://lupf.cn/articles/2019/11/23/1574503815568.html 详细的教你如何在centos上安装docker
数据库安装
-
主从基础详细
ip 端口 类型 镜像版本 容器名称 192.168.1.220 3306 主库 5.7.13 mysql-master01-3306 192.168.1.220 3307 从库 5.7.13 mysql-slave01-3307 -
创建工作目录
mkdir -p /usr/local/docker/mysql cd /usr/local/docker/mysql mkdir 3306 3307
-
准备my.cnf
这里准备这个配置文件的主要目的是为了后续方便主从的配置;使用的就是5.7.13版本对应的my.cnf;是预先从容器的/etc/mysql目录中拷贝出来的;如果你使用的不同的mysql镜像版本,可以按以下方式去拷贝出一份对应版本的my.cnf
# 如果你使用的是其他的版本,可以将5.7.13更换为你所使用的版本 docker run --name mysql-test -p 6033:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13 # 查看镜像是否运行成功 下面指令如果可以找到对应的详细信息,说明成功 docker ps # 将容器/etc/mysql/my.cnf文件拷贝到当前目录 docker cp mysql-test:/etc/mysql/my.cnf /usr/local/docker/mysql # 查看是否拷贝成功 ll /usr/local/docker/mysql # 将文件拷贝到各自的工作目录 cp /usr/local/docker/mysql/my.cnf /usr/local/docker/mysql/3306 cp /usr/local/docker/mysql/my.cnf /usr/local/docker/mysql/3307
-
主库
# 进入3306的工作目录 cd /usr/local/docker/mysql/3306 docker run \ -p 3306:3306 \ --name mysql-master01-3306 \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/my.cnf:/etc/mysql/my.cnf \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -v /etc/localtime:/etc/localtime:ro \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7.13
-
从库
# 进入3307的工作目录 cd /usr/local/docker/mysql/3307 docker run \ -p 3307:3306 \ --name mysql-slave01-3307 \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/my.cnf:/etc/mysql/my.cnf \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -v /etc/localtime:/etc/localtime:ro \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7.13
-
配置说明
-
-p
用于映射端口,如上所示分别将宿主机的3306、3307分别映射到容器master01和slave01的3306端口上
-
--name
设置容器的名称
-
-v
设置映射,将宿主机的目录映射到容器的目录;主要用于持久化关键数据,如/data目录就是用来持久化数据库文件的,这样就算是容器被remove掉之后,数据库的持久化文件依然还在,下次使用这个持久化文件启动一个新的容器数据依然还在。
-
-e
设置参数;
MYSQL_ROOT_PASSWORD
为数据库的root密码;TZ
用来设置时区 -
-d
以守护进程的方式运行
-
运行后的效果
docker ps -a
-
navicat连接测试
-
配置主从
-
主库配置
vim /usr/local/docker/mysql/3306/my.cnf ## 添加以下配置 # 集群唯一id # 同个局域网内唯一 所以可以使用ip的最后一段用来作为id 如192.168.1.123,那就把id设置为123,方便查找为题 # 这里由于使用的docker,且在一台机器上面,所以就用1 2来表示,实际使用过程中,没有谁会将主从部署在同一台机器上的 server-id=1 # 开启二进制日志功能 log-bin=mysql-master01-bin # 设置要同步的数据库,这里的t_mall为测试同步到数据库名 # 如果不设置标识全部同步 # binlog-do-db=t_mall # 设置屏蔽系统默认的数据库 binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema
-
从库配置
vim /usr/local/docker/mysql/3307/my.cnf # 集群唯一id server-id=2 # 开启二进制日志功能 log-bin=mysql-slave01-bin # 设置同步的库 #replicate_wild_do_table=t_mall.% # 设置忽略的库 replicate_wild_ignore_table=mysql.% replicate_wild_ignore_table=information_schema.% replicate_wild_ignore_table=performance_schema.%
-
重启数据库
docker restart mysql-master01-3306 mysql-slave01-3306
-
(主库)创建同步用户(建议使用Navicate客户端去连接并创建)
# 在默认的mysql数据库想创建 # 创建db_sync用户 GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%' IDENTIFIED BY 'db_sync'; # 查看用户 select * from user # 刷新权限 FLUSH PRIVILEGES; # 确认位点 SHOW master STATUS
-
从库配置
# 关闭同步 STOP SLAVE; # 配置同步 CHANGE MASTER TO master_host='192.168.1.220', master_port=3306, master_user='db_sync', master_password='db_sync', master_log_file='mysql-master01-bin.000003', master_log_pos=432; # master_host 主库的地址 # master_port 主库的端口 # master_user 主库同步使用的用户名 # master_password 主库同步使用的密码 # master_log_file binlog的名称 # master_log_pos log的位点 # 开启同步 START SLAVE; #查看同步状态 SHOW SLAVE STATUS;
-
主从测试(主库操作)
# 创建数据库 create database test_db; # 切换数据库 use test_db; # 创建测试表 create table test_db(id int(3),name char(10));
到这里,MySQL的主从复制就已经搭建完成了,这里是基于Docker的搭建,基于操作系统的安装和使用Docker的本质是没有什么不同的;但是使用Docker对系统的污染较少,所以个人是比较推荐使用Docker搭建
码字不易,感谢您的点赞!关注!评论!!!