使用docker安装mysql主从集群

2023-04-27 08:58:06 浏览数 (1)

安装MySQL主容器

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

代码语言:javascript复制
docker run --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

在这里,使用了Docker官方提供的MySQL镜像,并且使用了MySQL的默认3306端口。-e选项用于设置MySQL的root密码。

配置MySQL主容器

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

1.连接MySQL主容器

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

代码语言:javascript复制
docker exec -it mysql-master bash

2.创建数据库和用户

在连接到MySQL主容器后,使用以下命令创建一个名为mydb的数据库,并创建一个名为myuser的用户:

代码语言:javascript复制
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'@'%';"

3.启用二进制日志

使用以下命令启用MySQL主容器的二进制日志功能:

代码语言:javascript复制
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。

安装MySQL从容器

接下来,使用以下命令创建MySQL从容器,并将它们连接到MySQL主容器:

代码语言:javascript复制
docker run --name mysql-slave1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker run --name mysql-slave2 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

在上面的命令中,创建了两个MySQL从容器,使用了3307和3308端口,并设置了相同的MySQL root密码。

配置MySQL从容器

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

1.连接MySQL从容器

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

代码语言:javascript复制
docker exec -it mysql-slave1 bash

2.启用主从复制

在连接到MySQL从容器后,使用以下命令配置MySQL从容器的主从复制:

代码语言:javascript复制
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命令启动主从复制。

3.重复上述步骤

重复上述步骤,在mysql-slave2容器中配置主从复制:

代码语言:javascript复制
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;"

测试主从复制

现在,可以测试MySQL主从复制是否正常工作。在MySQL主容器中,使用以下命令创建一个名为test的表:

代码语言:javascript复制
mysql -uroot -p123456 -e "use mydb; create table test (id int(11) not null auto_increment, name varchar(255), primary key (id)); insert into test (name) values ('test');"

然后,在mysql-slave1和mysql-slave2容器中检查是否已复制数据:

代码语言:javascript复制
docker exec -it mysql-slave1 bash
mysql -uroot -p123456 -e "use mydb; select * from test;"
exit

docker exec -it mysql-slave2 bash
mysql -uroot -p123456 -e "use mydb; select * from test;"
exit

如果数据正确地复制到从容器中,则主从复制已成功完成。

0 人点赞