-
拉取容器
docker pull mysql
-
运行容器:
master1docker run -itd -p 3306:3306 --name mysql-master -v /mydata/mysql-master/conf:/etc/mysql/conf.d -v /mydata/mysql-master/logs:/logs -v /mydata/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
slave1
docker run -itd -p 3306:3306 --name mysql-slave1 -v /mydata/mysql-slave/conf:/etc/mysql/conf.d -v /mydata/mysql-slave/logs:/logs -v /mydata/mysql-slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
slave2
docker run -itd -p 3306:3306 --name mysql-slave2 -v /mydata/mysql-slave/conf:/etc/mysql/conf.d -v /mydata/mysql-slave/logs:/logs -v /mydata/mysql-slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
-
master配置,在/mydata/mysql-master/conf下创建my.cnf文件
[mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=200 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 指定需要同步的数据库名称 #binlog-do-db= ## 开启二进制日志功能 #记录所有更改数据的语句,可以用于主从服务器之间的数据同步,以及服务器遇到故 障时数据的无损失恢复。 log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed #statement 记录所有的写操作到bin-log文件 缺点:sql语句执行set time=now() 会出现主从不一致 #row 记录每行的变换 缺点:数据量大的时候,记录数据多 #mixed是statement和row的混合 ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 #通用查询日志 #记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令, 对我们复原操作的实际场 #景、发现问题,甚至是对数据库操作的审计都有很大的帮助。 general_log=ON general_log_file=/var/lib/mysql/mysql-general.log #慢查询日志 #记录所有执行时间超过long_query_time的所有查询,方便我们对查询进行优化。 slow_query_log=ON slow_query_log_file=/var/lib/mysql/mysql-slow.log long_query_time=3 #设置慢查询的阈值为3秒,超出此设定值的SQL即被记录到慢查询日志 log_output=FILE max_allowed_packet=200M #错误日志 #记录MySQL服务的启动、运行或停止MySQL服务时出现的问题,方便我们了解服务器的 状态,从而对服务器进行维护。 log-error=/var/lib/mysql/mysql-error.log
slave1配置,/mydata/mysql-master-slave/conf创建my.cnf文件
[mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=201 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=all # relay_log配置中继日志 #用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。 从服务器通过读取中继#日志的内容,来同步主服务器上的操作。 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## slave设置为只读(具有super权限的用户除外) read_only=1
slave2配置,/mydata/mysql-master-slave/conf创建my.cnf文件
[mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=202 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=all # relay_log配置中继日志 #用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。 从服务器通过读取中继#日志的内容,来同步主服务器上的操作。 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## slave设置为只读(具有super权限的用户除外) read_only=1
-
进入master容器,进入数据库,master容器实例内创建数据同步用户
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t7uB1lqQ-1684914908373)(C:\Users\donghr\AppData\Roaming\Typora\typora-user-images\image-20220809100947397.png)]
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
在主数据库中查看主从同步状态 show master status;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-einmw2OH-1684914908373)(C:\Users\donghr\AppData\Roaming\Typora\typora-user-images\image-20220809101036613.png)] -
进入2个slave容器内部 运行如下命令
change master to master_host='10.1.4.200', master_user='slave', master_password='123456', master_port=3306, master_log_file='mall-mysql-bin.000001', master_log_pos=711, master_connect_retry=30;
-
在从数据库中开启主从同步
start slave;
-
在从数据库中查看主从同步状态
show slave status \G;
出现如下情况说明成功:2个yes
docker安装mysql(主从复制)
于 2024-02-20 12:39:18 首次发布