主机地址:192.168.3.47:3307
从机地址:192.168.3.47:3308
/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;
在主机上面创建一个表 并插入几条记录 可以看一下从机是否成功同步