1:主,从,服务器docker容器的mysql版本保持一直
运行docker mysql镜像语句 将data,和conf和log,文件夹映射到宿主机上
docker run -d -p 3306:3306 --name mysql8.0.28 -v /opt/mysql/data:/var/lib/mysql -v /opt/mysql/conf:/etc/mysql/conf.d -v /opt/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root mysql:8.0.28
2.配置主数据库的配置文件,opt/mysql/conf/ 目录下创建或者编辑my.cnf 这里log-bin指定了二进制日志的存放位置,server-id是容器的唯一ID,binlog_format设置为ROW,expire_logs_days是日志的过期时间 配置完成后重启mysql容器
[mysqld]
log-bin=mysql-bin
server-id=1
binlog_format=ROW
expire_logs_days=30
3.检验二进制日志是否开启 sql语句: SHOW VARIABLES LIKE ‘log_bin’;
如果log_bin的值为ON,则表示二进制日志已经开启。还可以使用以下命令来查看binlog日志的详细信息。SHOW BINLOG EVENTS IN ‘mysql-bin.000001’;
4. 在主服务器上创建复制用户:创建一个用于复制的专用用户,并授权从服务器可以连接到主服务器并读取binlog。Sql如下
CREATE USER ‘replica’@‘192.168.200.133’ IDENTIFIED BY ‘password’;
GRANT REPLICATION SLAVE ON . TO ‘replica’@‘192.168.200.133’;
FLUSH PRIVILEGES;
5. 记录主服务器的binlog位置:在主服务器上查询当前的binlog文件和位置,这个信息将用于在从服务器上启动复制
SHOW MASTER STATUS;
6. 在从服务器上配置复制:在从服务器的MySQL配置文件中,设置server-id唯一(不能与主服务器相同),并且指向主服务器的binlog位置和复制用户替换unique_server_id为从服务器的唯一ID(不能与主服务器或其他从服务器的ID相同)。relay-log是你的从服务器的中继日志文件的路径,可以自定义log-bin是二进制日志文件存放的路径,你已经指定了mysql-bin。inlog_format=ROW是二进制日志的格式,ROW格式是复制的推荐格式。expire_logs_days是二进制日志文件的过期天数。
[mysqld]
server-id=2
binlog_format=ROW
relay-log=relay-bin
log-bin=mysql-bin
log-slave-updates
read-only=ON
expire_logs_days=30
7.然后根据第5步在主数据库查询file名字和position的信息进行编写SQL ,查询出来蓝色的,
CHANGE MASTER TO MASTER_HOST=‘192.168.200.131’, MASTER_USER=‘replica’, MASTER_PASSWORD=‘root’, MASTER_LOG_FILE=‘mysql-bin.000001’, MASTER_LOG_POS=882;
- 启动从服务器的复制进程:在从服务器上启动复制。SQL
START SLAVE;
如果已经有这个线程,则需要先停止 STOP SLAVE IO_THREAD;
从服务器查看状态 SHOW SLAVE STATUS;
查看 Slave_IO_Running 和 Slave_SQL_Running 是否都显示为 Yes。才成功
建数据库同步成功,但是建表不一致
主从建表 要每次执行SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;,表才会同步到从数据库 解决中