前提
已有两台服务器,一台服务器上已有单机数据库,现需要在另外一台服务器上配置从库,以已有库为主库实现主从同步。
- 两台服务器数据库端口对外网开放
- 主库ip为192.168.0.1
- 从库ip为192.168.0.2
主库开启binlog
配置文件[mysqld]下添加如下内容后,重新启动主库。
[mysqld]
log-bin
server-id=1
创建从库同步授权账号
CREATE USER 'username'@'192.168.0.2' IDENTIFIED BY 'password';
grant replication slave, replication client on *.* to 'username'@'192.168.0.2';
flush privileges;
mysqldump备份主库数据
主库锁表并查看状态
flush table with read lock;
show master status;
备份主库数据
mysqldump -h192.168.0.1 -P3306 -uusername -ppassword -A -B --events --master-data=2 > /db-$(date +%F)-all.sql
主库取消锁表
unlock tables;
从库启动并导入主库备份数据
docker-compose启动从库
docker-compose.yml文件如下
version: '3'
services:
#服务名称
mysql:
#容器名称
container_name: mysql-5.7.30
#镜像名称
image: mysql:5.7.30
#自动启动
restart: always
#端口映射
ports:
- "3306:3306"
#环境变量
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_USER=commonuser
- MYSQL_PASS=commonpassword
#挂载
volumes:
- /home/ubuntu/docker-iamges/mysql-5.7.30/conf.d:/etc/mysql/conf.d
- /home/ubuntu/docker-iamges/mysql-5.7.30/logs:/logs
- /home/ubuntu/docker-iamges/mysql-5.7.30/data:/var/lib/mysql
- /home/ubuntu/docker-iamges/mysql-5.7.30/query-logs:/query-logs
- /etc/timezone:/etc/timezone
- /etc/localtime:/etc/localtime
mysql配置文件如下
[mysqld]
server-id=2
default-time_zone='+8:00'
slow_query_log = 'ON'
#需要授予映射容器外部目录下对应slow.log权限给数据库用户
slow_query_log_file = /query-logs/slow.log
long_query_time = 1
docker启动容器
docker-compose up -d
进入容器命令行并恢复主库备份数据
#进入mysql容器
docker exec -i -t mysql-5.7.30 /bin/bash
#恢复备份数据
mysql -uroot -prootpassword </db-2022-02-11-all.sql
从库指定开始同步位置并开启同步
change master to master_host='192.168.0.1', master_port=3306, master_user='synclog', master_password='synclog0211sqlgo', MASTER_LOG_FILE='binlog.000009', MASTER_LOG_POS=441;
start slave;
查看主库和从库状态
#查看主库状态
show master status;
#查看从库状态
show slave status;