在Docker环境下部署Mysql8 一个主库多个从库,实现主从复制。
二:详细操作 创建mysql容器,不知道如何创建的可以查看[该播客]docker run -d -i --name mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 mysql docker run -d -i --name mysqlslave -e MYSQL_ROOT_PASSWORD=password -p 3307:3306 mysql docker run -d -i --name mysqlslave2 -e MYSQL_ROOT_PASSWORD=password -p 3308:3306 mysql使用Navicate测试是否成功 配置Master数据库
docker exec -it mysql bash vim /etc/mysql/my.cnf #如果vim不能使用执行下面命令 apt-get update apt-get install vim ##在my.cnf中添加如下配置 [mysqld] server-id=100 ## 同一局域网内要唯一 log-bin=master-bin ##二进制文件名称 【mysql8默认开启binlong】 binlog-format=ROW ##二进制日志格式 row,statement,mixed重启master数据库
docker restart mysql配置Slave数据库
docker exec -it mysqlslave bash vim /etc/mysql/my.cnf [mysqld] server-id=101 log-bin=mysql-slave-bin ## 配置中继日志 relay_log=mysql-relay-bin read_only=1 ## 设置为只读重启slave数据库
docker restart mysqlslave配置slave2数据库和slave配置一样
docker exec -it mysqlslave2 bash vim /etc/mysql/my.cnf [mysqld] server-id=102 log-bin=mysql-slave-bin ## 配置中继日志 relay_log=mysql-relay-bin read_only=1 ## 设置为只读进入master数据库开启主从复制
docker exec -it mysql bash mysql -uroot -p show master status ##记住File和Position查看master在docker容器中的通信地址
在cmd中执行 记住IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql
进入Slave客户端
docker exec -it mysqlslave bash mysql -uroot -p change master to master_host='172.17.0.3', master_user='root', master_password='password', master_port=3306, master_log_file='master-bin.000001', master_log_pos=339, master_connect_retry=30;开启Slave
start slave;查看是否开启成功
show slave status; ##保证下面两个Yes Slave_IO_Running: Yes Slave_SQL_Running: Yes使用Navicat进行测试 三:涉及知识
二进制日志的三种格式详解 Statement 每一条修改数据的sql都会记录到master的bin_log中,slave在复制的时候sql进程会解析成master端执行过的相同的sql在slave库上再次执行,只记录sql语句执行的细节不需要记录每一行变化的细节。 Row 日志中会记录成每一行数据修改的形式以及数据的变化,然后在slave端再对相同的数据进行修改。 Mixed模式(混合模式) 实际上就是前两种模式的结合,在mixed模式下,mysql会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也是在statement和row之间选择一种。
Slave_IO_Running: Yes Slave的IO进程:用来读取Master数据库的binlog日志,然后写入Slave本地的中继日志。 Slave_SQL_Running: Yes Slave的处理进程:将中继日志数据分析成sql一行一行的执行,同步主库的数据 主从复制是单进程的所以主从数据会存在延时,后期会出一篇文章单独讲解原理



