docker集群部署主从mysql

news/2024/7/8 3:23:05 标签: docker, mysql, 容器

搭建一个mysql集群,1主2从,使用docker容器

一、创建dockermysql镜像

下次补上,因为现在很多网络不能直接pull,操作下次补上。

二、创建mysql容器

创建容器1

docker run -it -d --name mysql_1 -p 7001:3306 --net mynet --ip 172.18.0.2 -m 400m -v /root/mysql_1/data:/var/lib/mysql -v /root/mysql_1/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=abc123456 -e TZ=Asia/Shanghai --privileged=true mysql:5.7 --lower_case_table_names=1

执行成功后,

查看:docker ps -a

说明部署成功了,先暂停这个容器docker stop mysql_1

接着在/root/mysql_1/config/下创建my.cnf

[mysqld]
character_set_server=utf8
server_id=1
log_bin=mysql_bin
relay_log=relay_bin
log-slave-updates=1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重新启动mysql_1容器docker start mysql_1

进入容器docker exec -it mysql_1 bash

添加数据库账号与设置权限

mysql -uroot -pabc123456

添加一个账号为sync,密码为:abc123456的有同步数据权限的账号,这个步骤参考以下方法。如果能用navicat连接上这个数据库,也可以用工具直接创建这个账号与赋权限,个人测试的直接授所有权限。


mysql 创建用户
方法一:

使用CREATE USER语句来创建用户。以下是一个示例:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

该语句将在MySQL数据库中创建一个名为'username'的用户,并为该用户设置密码为'password'。用户只能从本地主机连接到数据库。

方法二:

使用GRANT语句创建用户。以下是一个示例:

GRANT ALL PRIVILEGES ON . TO 'username'@'localhost' IDENTIFIED BY 'password';

该语句将为名为'username'的用户授予对所有数据库和表的全部权限,并设置密码为'password'。用户只能从本地主机连接到数据库。

注意:在实际生产环境中,应根据需要为用户分配适当的权限,而不是赋予全部权限。

方法三:

使用INSERT INTO语句将用户信息插入到mysql.user表中。以下是一个示例:

INSERT INTO mysql.user (User, Host, Password) VALUES ('username', 'localhost', PASSWORD('password'));

该语句将在mysql.user表中插入一条记录,包含用户名为'username'、主机为'localhost'和使用PASSWORD函数加密的密码。用户只能从本地主机连接到数据库。

需要注意的是,为了使新用户生效,必须使用FLUSH PRIVILEGES语句刷新MySQL的权限缓存:

FLUSH PRIVILEGES;

创建容器2

docker run -it -d --name mysql_2 -p 7002:3306 --net mynet --ip 172.18.0.3 -m 400m -v /root/mysql_2/data:/var/lib/mysql -v /root/mysql_2/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=abc123456 -e TZ=Asia/Shanghai --privileged=true mysql:5.7 --lower_case_table_names=1

执行成功后,

查看:docker ps -a

说明部署成功了,先暂停这个容器docker stop mysql_2

接着在/root/mysql_2/config/下创建my.cnf

[mysqld]
character_set_server=utf8
server_id=2
log_bin=mysql_bin
relay_log=relay_bin
read-only=1
#log-slave-updates=1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重新启动mysql_2容器docker start mysql_2

使用navicat连接,并设置

stop slave;

change master to master_host='172.18.0.2',master_port=3306,master_user='sync',master_password='abc123456'

start slave;

show slave status;

一条条执行,前面都是执行结果为OK

最后一条的显示为:这就说明从库设置成功!

创建容器3

docker run -it -d --name mysql_2 -p 7003:3306 --net mynet --ip 172.18.0.4 -m 400m -v /root/mysql_3/data:/var/lib/mysql -v /root/mysql_3/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=abc123456 -e TZ=Asia/Shanghai --privileged=true mysql:5.7 --lower_case_table_names=1

执行成功后,

查看:docker ps -a

说明部署成功了,先暂停这个容器docker stop mysql_3

接着在/root/mysql_3/config/下创建my.cnf

[mysqld]
character_set_server=utf8
server_id=3
log_bin=mysql_bin
relay_log=relay_bin
read-only=1
#log-slave-updates=1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重新启动mysql_3容器docker start mysql_3

使用navicat连接,并设置

stop slave;

change master to master_host='172.18.0.2',master_port=3306,master_user='sync',master_password='abc123456'

start slave;

show slave status;

一条条执行,前面都是执行结果为OK

最后一条的显示为:这就说明从库设置成功!

在主库上创建一个数据库与数据表

在从库上自动添加了这个库与表


http://www.niftyadmin.cn/n/5536194.html

相关文章

FPGA问题

fpga 问题 ep2c5t144 开发板 第一道坎,安装软件;没有注册,无法产生sop文件,无法下载 没有相应的库的quartus ii版本,需要另下载 第二道坎,模拟器的下载,安装; 第三道,v…

Java中深度理解线程和进程

在Java中理解和区分线程和进程是至关重要的,因为它们是实现并发和多任务的基础。 进程(Process) 定义: 进程是程序在计算机上的一次执行活动,是系统进行资源分配和调度的基本单位。每个进程都有自己的独立地址空间、堆栈和数据段&#xff0…

基于轨迹信息的图像近距离可行驶区域方案验证

一 图像可行驶区域方案 1.1 标定场景 1.2 标定步骤 设计一定间距标定场,在标定场固定位置设置摄像头标定标识点。主车开到标定场固定位置录制主车在该位置各个摄像头数据,通过摄像头捕获图像获取图像上关键点坐标pts-2d基于标定场设计,计算…

服务器工具集合推荐

推荐一个朋友开源的服务器运维整合工具,目前的功能包括: ddns,rdp、ssh终端、ftp、http代理,支持在线文件编辑,文件管理,docker,进程,系统监控、wol唤醒,电脑远程开机,点对点&#…

Winform和WPF中关于是否处于设计模式的判断方式

在界面开发中,若在构造函数中增加了加载数据的代码,在设计界面时会出现界面打不开或者出现报错的情况。此时,可以检查一下是否为该情况。 Winform中的DesignMode判断 在WinForm开发中,一般会在窗体或者UserControl中判断当前是否为设计状态,…

JVM垃圾回收性能调优实战指南

JVM垃圾回收性能调优实战指南 一、引言 在Java应用程序中,垃圾回收(Garbage Collection, GC)是自动管理内存的重要机制。然而,不恰当的垃圾回收配置可能导致性能瓶颈,如频繁的GC暂停、内存碎片过多等。因此&#xff…

Linux 编译生成静态库以及动态库全流程

在Linux系统中,通常不直接使用.lib作为库文件的扩展名,因为.lib是Windows平台下常用的静态库文件扩展名。然而,Linux下对应的静态库文件扩展名是.a(archive),而动态库文件扩展名是.so(shared ob…

哈喽GPT-4o,对GPT-4o 论文速写的思考与探索

作为一款强大的语言模型,ChatGPT 在论文写作上具备显著优势。它能够辅助学者或研究人员自动创建论文框架、摘要、文献综述及论文段落(如引言、方法、结果、结论等)。此外,ChatGPT 还能优化论文结构、润色、降低内容重复率&#xf…