使用docker安装mysql主从集群

1.安装MySQL主容器

1.1首先,使用以下命令创建MySQL主容器:

sudo docker run --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

使用docker安装mysql主从集群_第1张图片

在这里,使用了Docker官方提供的MySQL镜像,并且使用了MySQL的默认3306端口。--name表示给该主容器设置一个名字,-p表示设置端口,-e选项用于设置MySQL的root密码,-d表示后台运行该容器。

然后使用sudo docker ps -a查看该进程

使用docker安装mysql主从集群_第2张图片

1.2配置MySQL主容器

使用以下步骤配置MySQL主容器:

1.2.1.连接MySQL主容器

使用以下命令连接到MySQL主容器:

sudo docker exec -it mysql-master bash

1.2.2.创建数据库和用户

在连接到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'@'%';"

结果如下: 

使用docker安装mysql主从集群_第3张图片

1.2.3.启用二进制日志

使用以下命令启用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;"

结果如下:

使用docker安装mysql主从集群_第4张图片

 在上面的命令中,设置了二进制日志文件的位置为/var/lib/mysql/mysql-bin.log。

2.安装MySQL从容器

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从容器:

2.2.1.连接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'@'%';"

2.2.2.启用主从复制

在连接到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命令启动主从复制。

2.2.3.重复上述步骤

使用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机器没有自动生成表,更不用说测试数据了。

使用docker安装mysql主从集群_第5张图片

 

你可能感兴趣的:(数据库MySQL,docker,mysql,容器)