数据库备份-docker配置主从数据库
创建 Docker Compose 文件
创建一个 docker-compose.yml
文件,定义两个 MySQL 容器(一个主库,一个从库)
services:mysql:image: mysql:8.0.27container_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: life_spaceMYSQL_USER: replica_userMYSQL_PASSWORD: 123456volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"- "./mysql/backup:/backup"- "./mysql/init:/docker-entrypoint-initdb.d"networks:- life_spacecommand: --server-id=1 --log-bin=mysql-bin --binlog_do_db=life_space mysql-slave:image: mysql:8.0.27container_name: mysql-slaveports:- "3307:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: life_spaceMYSQL_USER: replica_userMYSQL_PASSWORD: 123456volumes:- "./mysql-slave/data:/var/lib/mysql"- "./mysql-slave/backup:/backup" networks:- life_spacecommand: --server-id=2 --relay-log=mysql-relay-bin --log-bin=mysql-bin --binlog_do_db=life_space
3 配置MySQL-SSL
创建自定义配置文件:/etc/mysql/conf.d/ls-mysql.cnf。添加如下内容;
[mysqld] ssl-ca=/var/lib/mysql/ca.pem ssl-cert=/var/lib/mysql/server-cert.pem ssl-key=/var/lib/mysql/server-key.pem
4 启动 MySQL 容器
在 docker-compose.yml
文件所在目录下,运行以下命令启动容器:
docker-compose up -d
5. 配置主库(Master)
5.1 进入主库容器
docker exec -it mysql-master mysql -uroot -prootpassword
5.2 创建复制用户
在主库中创建用于复制的用户:
CREATE USER 'replica_user'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES;
5.3 获取主库状态
在主库中执行以下命令,记录 File
和 Position
的值:
SHOW MASTER STATUS;
输出示例:
Binlog_Do_DB:life_space 指的就是要备份的数据库,这很重要!!!
+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000005 | 156 | life_space | | | +------------------+----------+--------------+------------------+-------------------+
6. 配置从库(Slave)
6.1 进入从库容器
docker exec -it mysql-slave mysql -uroot -p123456
6.2 配置从库连接主库
在从库中执行以下命令,配置从库连接主库:
sql
STOP SLAVE; CHANGE MASTER TO MASTER_HOST='mysql', MASTER_USER='replica_user', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=156, MASTER_SSL=1, MASTER_SSL_CA='/var/lib/mysql/ca.pem', MASTER_SSL_CERT='/var/lib/mysql/client-cert.pem', MASTER_SSL_KEY='/var/lib/mysql/client-key.pem';
6.3 启动从库复制
在从库中启动复制:
START SLAVE;
6.4 检查从库状态
在从库中执行以下命令,检查复制状态:
SHOW SLAVE STATUS\G;
重点关注以下字段:
-
Slave_IO_Running
:应为Yes
。 -
Slave_SQL_Running
:应为Yes
。 -
Seconds_Behind_Master
:表示从库与主库的延迟时间,通常应为0
。