docker下mysql主从同步配置
基础信息:
主机地址:192.168.3.47:3307
从机地址:192.168.3.47:3308
主机配置步骤
- 按照之前的文章docker下安装mysql先把mysql镜像拉去下来,这里我用的是5.7.38的版本
- 先创建目录
/home/docker/mysql_master/
,在该目录下创建2个文件夹conf
和data
#这个是主机的映射根目录
mkdir -p /home/docker/mysql_master
#这个是主机的配置文件目录
mkdir -p /home/docker/mysql_master/conf
#这个是主机的数据存储目录
mkdir -p /home/docker/mysql_master/data
- 在
/home/docker/mysql_master/conf
目录下创建如下的配置文件,名称为my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
#这里是主从同步中,主机的配置
#开启binlog日志
log-bin=mysql-bin
#设置主机id,不能与其他主机或从机重复
server-id=1
#设置要记录日志的数据库
binlog-do-db=test
#设置忽略日志的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=performance_schema
#binlog日志保留天数,节省空间
expire-logs-days=7
#自增id从哪个数开始
auto-increment-offset=1
#自增id每次递增的量
auto-increment-increment=2
- 配置完毕之后开始创建容器:
docker run -d -p 3307:3306 --name=mysql_master -v /home/docker/mysql_master/conf/:/etc/mysql/conf.d/ -v /home/docker/mysql_master/data/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.38
容器创建完毕之后即启动,此时使用Navicat连接 192.168.3.47:3307 账户密码root/123456提示连接成功。
5. 创建同步用账号
在Navicat连接上执行如下sql创建一个同步专用的用户,这个将来会在从机上面用到:
create user 'repl_docker'@'%' identified by '123456';
grant replication slave on *.* to 'repl_docker'@'%' identified by '123456';
flush privileges
从机配置步骤
- 先创建目录
/home/docker/mysql_slave/
,在该目录下创建2个文件夹conf
和data
#这个是从机的映射根目录
mkdir -p /home/docker/mysql_slave
#这个是从机的配置文件目录
mkdir -p /home/docker/mysql_slave/conf
#这个是从机的数据存储目录
mkdir -p /home/docker/mysql_slave/data
- 在
/home/docker/mysql_slave/conf
目录下创建如下的配置文件,名称为my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
#设置从机id,不能与其他主机或从机重复
server-id=2
#设定要同步哪个数据库,多个可以复制一行继续指定
replicate-do-db=test
#设定忽略哪些数据库
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
#中继日志的名字,复制线程先把远程的变化复制到中继日志然后再执行
relay_log=mysqld-relay-bin
#日志保留天数,节省空间
expire-logs-days=7
#如果从库会作为其他库的主库则需要配置这个,否则可以忽略
log-slave-updates
#忽略同步时遇到的错误,否则出现错误容易导致后续同步终止
slave-skip-errors=all
#自增id从哪个数开始
auto-increment-offset=2
#自增id每次递增的量
auto-increment-increment=2
- 配置完毕之后开始创建容器:
docker run -d -p 3308:3306 --name=mysql_slave -v /home/docker/mysql_slave/conf/:/etc/mysql/conf.d/ -v /home/docker/mysql_slave/data/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.38
容器创建完毕之后即启动,此时使用Navicat连接 192.168.3.47:3308 账户密码root/123456提示连接成功。
4. 开启同步
首先在从机数据库上面创建与主机数据库名称和配置相同的数据库,并把主机数据库数据导入到从机,导入期间主机不要改变数据,这一步特别重要
然后用Navicat连接到主库
并执行如下sql获取结果:
show master status;
然后在Navicat连接从库
并执行如下sql:
change master to
master_host='192.168.3.47',
master_port=3307,
master_user='repl_docker',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=1542;
上面的值根据字母意思可以猜出来,其中最后2个 master_log_file
和master_log_pos
来自于上面从主库上面查到的值,这里请特别注意一下。
执行完毕之后接着在从机上面启动同步,执行如下sql文:
start slave;
此时可以执行如下sql文查看同步是否启动成功:
show slave status;
试验
在主机上面创建一个表 并插入几条记录 可以看一下从机是否成功同步