使用docker安装mysql主从集群

news/2024/11/29 0:51:42/

1.安装MySQL主容器

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

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'@'%';"

结果如下: 

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;"

结果如下:

 在上面的命令中,设置了二进制日志文件的位置为/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;"
exitsudo docker exec -it mysql-slave2 bash
mysql -uroot -p123456 -e "use mydb; select * from test;"
exit

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

实际结果,问题来了,从1和从2机器没有自动生成表,更不用说测试数据了。

 


http://www.ppmy.cn/news/703715.html

相关文章

记一次工作上Sqlserver每日备份失败及如何解决

发现数据库迁移后sqlserver不再执行每日备份,重新写了每日备份计划当天凌晨也没成功,后来发现sqlserver代理没有启动,启动后也没有成功备份,后来发现在sqlserver代理的错误日志中看到一条 “尚未定义空闲CPU条件-OnIdle作业条件将…

2.5 Android ebpf帮助函数解读(四)

61.long bpf_sock_ops_cb_flags_set(struct bpf_sock_ops *bpf_sock, int argval) 描述:尝试设置bpf_sock_ops相关联的完整TCP套接字的bpf_sock_ops_cb_flags字段的值为argval。 bpf_sock_ops_cb_flags字段的主要应用,是确定是否应在 TCP 代码的不同地方调用类型为BPF_PROG…

关于u8备份自动失败问题

最近不知道怎么回事,u8的自动备份无法正常进行。 网上搜各种配置还是不行。 今天问了一下官方,具体恢复来了。 1自动备份的问题研发出过补丁,请安装公共平台最新AA、FS、SMC补丁; 2检查sqlserver代理服务是否启动;…

关于sql server自动备份 该作业失败问题

因为有一个每周备份的任务,想偷懒设置一下自动备份。 但是周一看的时候并没有备份好,当时有别的事情就没管它,今天看备份居然还没有 就看了一下日志,报错 作业失败:无法确定所有者是否有服务器访问权限的解决方法 错…

sqlserver还原数据库时失败因为 当前没有数据库备份

今晚服务器到期了,新买了一台,还原数据库时遇到了 部分bak无法还原的问题,当时以为自己备份出问题,下一身冷汗,准备联系云服务商把原来的主机先恢复回来,最后还是逼着自己走了一波度娘,看来网上…

SQL Server 数据库备份失败解决方法

问题:System.Data.SqlClient.SqlError: 无法使用备份文件 D:\20160512.bak,因为原先格式化该文件时所用扇区大小为 512,而目前所在设备的扇区大小为 4096。 (Microsoft.SqlServer.Smo) 方法:删除原来那个备份记录就行 转载于:http…

mysql数据备份失败解决方法

转储为 .sql文件后,运行时报错。此时可以尝试将sql文件在高版本mysql上运行,之后在转储为.sql文件。重新运行即可。 MySQL默认情况下是否区分大小写,使用show Variables like %table_names’查看lower_case_table_names的值,0代表…

sql server 备份失败[上加载的介质已格式化为支持 1 个介质簇,但根据指定的备份设备,应支持 2 个介质簇]

....上加载的介质已格式化为支持 1 个介质簇,但根据指定的备份设备,应支持 2 个介质簇。 这句话的意思是,我的C:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\路径下已经存在一个备份文件,不能有多个,所以…