Mysql 搭建主从复制
- Docker Mysql 镜像启动命令(主库)
docker run --name mysql-master -ti -d --privileged="true" -p 3306:3306 alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/mysql_optimized:20240221-8.0.32-2.3.0 mysql_keentune.sh
- 修改临时密码
- 如果您要使用mysql的root账户,进入到容器内部,可以通过如下命令查询到临时密码:
cat /var/log/mysql/mysqld.log | grep password
- mysql -u root -p 回车输入临时密码
- ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'; 通过这条命令修改密码
- FLUSH PRIVILEGES; 立刻生效
- 启动mysql从库(这里在命令中去掉了--net=host)
docker run --name mysql-slave -ti -d --privileged="true" -p 3308:3306 alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/mysql_optimized:20240221-8.0.32-2.3.0 mysql_keentune.sh
- 查看主库的IP地址 docker inspect mysql-master | grep IPAddress
- 修改主库的my.cnf , 在里面添加server_id=1
- docker cp mysql-master:/etc/my.cnf.d/mysql-server.cnf ./mysql-server.cnf 将容器中的文件copy到本地路径
- 添加server_id=1
- docker cp ./mysql-server.cnf mysql-master:/etc/my.cnf.d/mysql-server.cnf 再将文件copy回容器
- docker restart mysql-master 重启容器
- 修改主库的my.cnf , 在里面添加server_id=2 (方法同上)
- 配置主服务器主从同步的用户
- 进入容器,登陆mysql
CREATE USER 'replication_user'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS; 查看主节点的状态
- 配置从服务器(和主服务器关联)
- 进入容器,登陆mysql
CHANGE REPLICATION SOURCE TO SOURCE_HOST='172.17.0.8', SOURCE_USER='replication_user', SOURCE_PASSWORD='root', SOURCE_LOG_FILE='binlog.000002', SOURCE_LOG_POS=851;
START REPLICA; 启动从服务器复制进程
SHOW REPLICA STATUS\G 查看从服务器状态
- 到这里主从配置成功啦~~~
- 测试主从复制
- 连接主服务器,进入mysql
- create database mydatabase;
- use mydatabase;
- CREATE TABLE `test` (
- 连接主服务器,进入mysql
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键' ,
`remark` varchar(255) DEFAULT NULL COMMENT '说明',
PRIMARY KEY (`id`) USING BTREE
)ENGINE=IMNODB DEFAULT CHARSET=utf8 COMMENT='test';
- insert into mydatabase.test values (22,'test');
- 连接从服务器,进入mysql
- 查询从服务器表数据,发现此时数据同步过来了,测试ok!