前言
在docker环境运行mysql容器,需要如何配置实现主从复制?
前期准备,需要安装好docker、docker-compose的运行环境。
一、运行mysql容器
1、创建mysql目录,执行如下命令。
mkdir -p /docker/mysql
cd /docker/mysql
2、编写yaml文件,执行如下命令。version替换成自己的compose版本;数据库密码重新设定新密码。如果需要多台从机则自行添加相应内容。
vim docker-compose.yml
version: '2.2.2'
services:
mysql-master:
image: mysql:8.0
container_name: mysql-master
command: --server-id=1 --log-bin=mysql-bin --binlog-do-db=mydb --skip-name-resolve
environment:
- MYSQL_ROOT_PASSWORD=123456.
networks:
- dbnet
mysql-slave:
image: mysql:8.0
container_name: mysql-slave
command: --server-id=2 --relay-log=relay-bin --log-bin=mysql-bin --replicate-do-db=mydb --skip-name-resolve
environment:
- MYSQL_ROOT_PASSWORD=123456.
networks:
- dbnet
networks:
dbnet:
name: dbnet
driver: bridge
3、启动服务,执行如下命令。
docker-compose up -d
4、检查服务是否正常启动,执行如下命令。
docker-compose ps -a
正常启动会返回如下内容。
5、至此mysql容器已正常运行,接下来进行mysql主机配置。
二、配置mysql主机
1、进入mysql-master容器,执行如下命令。
docker exec -ti mysql-master bash
2、登录mysql,执行如下命令,输入第一步的时候配置的密码。
mysql -u root -p
3、创建用户用于复制,执行如下SQL,需要替换成自己的账号密码。
# 创建账号&密码
CREATE USER 'repl_ayzen'@'%' IDENTIFIED BY 'repl_123456.';
# 给用户授权
GRANT REPLICATION SLAVE ON *.* TO 'repl_ayzen'@'%';
# 刷新权限
FLUSH PRIVILEGES;
4、查看主服务器的二进制日志状态,执行如下SQL。
SHOW MASTER STATUS;
正常会返回如下内容,需要记住File、Position,用于配置从机的时候使用。
5、至此,主机的配置就已完成,接下来进行mysql从机配置。
三、配置mysql从机
1、进入mysql-slave容器,执行如下命令。
docker exec -ti mysql-slave bash
2、登录mysql,执行如下命令,输入第一步的时候配置的密码。
mysql -u root -p
3、配置从服务器复制,执行如下SQL。
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='repl_ayzen',
MASTER_PASSWORD='repl_123456.',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=868;
因为主从数据库配置的是同一个容器网络,所以HOST可以配置成主机的容器名称。
USER、PASSWORD就是第二步的时候创建的用于复制的账号密码。
FILE、POS就是第二步的时候执行show master status;获取的信息。
4、启动从服务器复制,执行如下SQL。
start slave;
5、检查从服务器的复制状态,执行如下SQL。
show slave status\G;
正常会返回如下内容。
查看 Master_Log_File 和 Read_Master_Log_Pos 的值是否为刚刚配置的值。
查看 Slave_IO_Running
和 Slave_SQL_Running
的值是否都为 Yes
。如果是,那么从服务器正在正常地从主服务器复制数据。
6、至此,从机的配置也已经完成,接下来就是进行测试验证。
四、测试验证
1、进入mysql-master容器,并且登录mysql。
2、创建数据库mydb,执行如下SQL。
create database mydb;
3、创建用户表users,执行如下SQL。
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age INT NOT NULL
);
4、给users表插入数据,执行如下SQL。
insert into users(name,age) values('ayzen',18);
5、从宿主机新开一个窗口,进入mysql-slave容器,并且登录mysql。
6、查看数据库mydb是否已同步,执行如下SQL。
show databases;
返回如下内容,包含mydb,说明已正常同步。
7、检查users表数据,执行如下SQL。
use mydb;
select * from users;
返回如下内容,说明users已经数据也已经同步到从数据库。
8、小结,mysql主从复制的配置已完成并且验证OK。
总结
使用docker运行mysql容器并且配置主从复制,简单来说就四个步骤。
1、安装运行mysql容器;
2、配置mysql主机,创建账号,获取状态;
3、配置mysql从机,配置从服务器复制,启动从服务器复制;
4、主从数据库的测试验证;
本人能力有限,还有许多不足之处还望多多指教,谢谢。