1.1首先,使用以下命令创建MySQL主容器:
sudo docker run --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
在这里,使用了Docker官方提供的MySQL镜像,并且使用了MySQL的默认3306端口。--name表示给该主容器设置一个名字,-p表示设置端口,-e选项用于设置MySQL的root密码,-d表示后台运行该容器。
然后使用sudo docker ps -a查看该进程
1.2配置MySQL主容器
使用以下步骤配置MySQL主容器:
使用以下命令连接到MySQL主容器:
sudo docker exec -it mysql-master bash
在连接到MySQL主容器后,使用以下命令创建一个名为mydb的数据库,并创建一个名为myuser的用户:
mysql -uroot -p123456 -e "create database mydb;"
mysql -uroot -p123456 -e "create user 'myuser'@'%' identified by 'mypassword';"
mysql -uroot -p123456 -e "grant all privileges on mydb.* to 'myuser'@'%';"
结果如下:
使用以下命令启用MySQL主容器的二进制日志功能:
mysql -uroot -p123456 -e "set global log_bin_trust_function_creators=1;"
mysql -uroot -p123456 -e "set global binlog_format='ROW';"
mysql -uroot -p123456 -e "set global server_id=1;"
mysql -uroot -p123456 -e "set global log_bin='/var/lib/mysql/mysql-bin.log';"
mysql -uroot -p123456 -e "flush logs;"
结果如下:
在上面的命令中,设置了二进制日志文件的位置为/var/lib/mysql/mysql-bin.log。
2.1接下来,使用以下命令创建MySQL从容器,并将它们连接到MySQL主容器:
sudo docker run --name mysql-slave1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
sudo docker run --name mysql-slave2 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
结果如下图:
在上面的命令中,创建了两个MySQL从容器,使用了3307和3308端口,并设置了相同的MySQL root密码。
2.2配置MySQL从容器
使用以下步骤配置MySQL从容器:
使用以下命令连接到MySQL从容器:
sudo docker exec -it mysql-slave1 bash
创建库和用户
mysql -uroot -p123456 -e "create database mydb;"
mysql -uroot -p123456 -e "create user 'myuser'@'%' identified by 'mypassword';"
mysql -uroot -p123456 -e "grant all privileges on mydb.* to 'myuser'@'%';"
在连接到MySQL从容器后,使用以下命令配置MySQL从容器的主从复制:
mysql -uroot -p123456 -e "change master to master_host='mysql-master', master_user='myuser', master_password='mypassword', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=154;"
mysql -uroot -p123456 -e "start slave;"
结果如下:
在上面的命令中,设置了MySQL主容器的IP地址,用户名和密码,端口,二进制日志文件名和位置以及复制的起始位置。最后,使用start slave命令启动主从复制。
使用exit退出当前bash,然后重复上述步骤:
使用以下命令连接到MySQL从容器:
sudo docker exec -it mysql-slave2 bash
创建库和用户
mysql -uroot -p123456 -e "create database mydb;"
mysql -uroot -p123456 -e "create user 'myuser'@'%' identified by 'mypassword';"
mysql -uroot -p123456 -e "grant all privileges on mydb.* to 'myuser'@'%';"
在mysql-slave2容器中配置主从复制
sudo docker exec -it mysql-slave2 bash
mysql -uroot -p123456 -e "change master to master_host='mysql-master', master_user='myuser', master_password='mypassword', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=154;"
mysql -uroot -p123456 -e "start slave;"
结果如下:
3.测试主从复制
3.1现在,可以测试MySQL主从复制是否正常工作。在MySQL主容器中,使用以下命令创建一个名为test的表:
sudo docker exec -it mysql-master bash然后
mysql -uroot -p123456 -e "use mydb; create table test (id int(11) not null auto_increment, name varchar(255), primary key (id)); insert into test2 (name) values ('test');"
3.2然后,在mysql-slave1和mysql-slave2容器中检查是否已复制数据:
sudo docker exec -it mysql-slave1 bash
mysql -uroot -p123456 -e "use mydb; select * from test;"
exit
sudo docker exec -it mysql-slave2 bash
mysql -uroot -p123456 -e "use mydb; select * from test;"
exit
如果数据正确地复制到从容器中,则主从复制已成功完成。
实际结果,问题来了,从1和从2机器没有自动生成表,更不用说测试数据了。