【Docker】MySQL 主从配置(一主一从)
MySQL 主从配置(一主一从)
- ※ 主从同步
- 1. Docker 安装 MySQL
- 2. 配置 主(master)容器
- 3. 配置 从(slave)容器
- 4. 主(master)从(slave)复制
※ 主从同步
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)
复制异步进行,从服务器无需一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
使用主从同步的好处:
- 通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
- 提高数据安全,因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据
- 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能
1. Docker 安装 MySQL
作为准备阶段,我们需要下载 MySQL 镜像,并准备主从两个容器
仓库中查询MySQL
输入docker search mysql
在docker 镜像仓库中查询 MySQL镜像
拉取 MySQL 镜像
随后使用docker pull docker.io/mysql
命令下载该版本(即“拉取”镜像)
下载完成后,使用docker image ls
命令查看镜像列表:
运行 主(master)容器
主从容器必须设置不同的对外端口,这里我们规定,主容器的端口号设置为3310,从容器的端口号设置为3311
docker run -itd --name=mysql_master -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123 docker.io/mysql
使用docker ps
命令查询 主(master)容器 是否启动:
运行 从(slave)容器
设置从容器的端口号为3311
查询 从(slave)容器 是否启动:
使用navicat测试是否连通
至此,容器准备工作完成!
【注】连接失败 可能原因:防火墙未开放目标端口号
2. 配置 主(master)容器
配置阶段:配置 主(master)容器
进入 master 容器内
使用如下命令进入 master容器内:
docker exec -it mysql_master /bin/bash
进入 /etc/mysql 文件夹
使用 vi/vim 编辑 my.cnf 文件
vi/vim 没有安装,解决步骤:
执行
apt-get update
做准备工作:
执行
apt-get install vim
安装vim
使用
vim my.conf
进行编辑 my.cnf
在my.cnf添加 唯一ID 和 必要信息(使用“i” 键进入编辑模式,结束后Esc +
:wq
保存修改)
重新启动容器:使配置生效
创建专用账户(slave)进行主从同步
- 使用root账户登入MySQL:
- 创建专用同步账户(slave):
3. 配置 从(slave)容器
配置阶段:配置 从(slave)容器
进入 slave 容器内
进入 /etc/mysql 文件夹
使用 vi/vim 编辑 my.cnf 文件
- 准备工作:
- 编辑文件:
server-id=201
log-bin=mysql-slave-bin
relay_log=edu-mysql-relay-bin
4. 主(master)从(slave)复制
关联阶段:主从复制
查看master状态
- 进入master容器:
- 显示主服务器状态:
在slave中执行命令
- 使用命令
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql_master
查询master容器的独立IP
- 进入slave容器,执行SQL语句:
master_host:Master库的地址,容器独立ip
master_port:Master库的端口号,容器端口号(默认3306)
master_user:用于数据同步的用户
master_password:用于数据同步用户的密码
MASTER_LOG_FILE:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
MASTER_LOG_POS:从哪个 Position 开始读,即上文中提到的 Position 字段的值
- 开启主从复制过程
- 配置成功:
show slave status \G;
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 172.17.0.2Master_User: slaveMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 879Relay_Log_File: edu-mysql-relay-bin.000002Relay_Log_Pos: 324Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 1416Relay_Log_Space: 537Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id: 200Master_UUID: a699d8b9-f9dc-11eb-a124-0242ac110002Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position: 0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:Master_public_key_path:Get_master_public_key: 0Network_Namespace:
1 row in set, 1 warning (0.00 sec)ERROR:
No query specified
可能遇到的错误:
查看主库:
USE mysql;
SELECT plugin FROM user WHERE user = 'slave';
原来是主库 slave用户的 plugin 是 caching_sha2_password 导致连接不上,修改为mysql_native_password 即可解决。
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
如果还是出现错误,可以尝试删除 salve 用户、抛弃权限,重新建立即可:
- 删除用户命令:
DELETE FROM user WHERE user='用户名';
flush privileges;
DROP user 用户名@'%';
在图形化界面navicat中测试
建立数据库 test_db
进行测试:
至此,MySQL 主从配置完成!
【Docker】MySQL 主从配置(一主一从)相关推荐
- docker mysql.sock,Docker mysql主从配置
Docker mysql主从配置 一:Mysql基于Docker的主从复制搭建 1:安装docker,安装步骤可见我之前的文章:Docker-常用基建的安装与部署 docker ps 命令查询当前的容 ...
- docker mysql 主从配置
2019独角兽企业重金招聘Python工程师标准>>> 1.首先创建两个文件my-m.cnf(主库配置) .my-s.cnf(从库配置) my-m.cnf 内容如下 # Copyri ...
- docker mysql主从_使用docker 实现MySQL主从同步/读写分离
1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...
- mysql主从配置流程
一.mysql主从配置原理 1.master将操作记录写到二进制日志中(binary log)中: 2.slave IO 线程将master的binary log events读写到它的中继日志(re ...
- Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- MySql(18)——Linux MySQL主从配置
MySQL 主从配置 Author:xushuyi 参照技术:http://www.cnblogs.com/kevingrace/p/6256603.html 1. 主从数据库 1.主库:192.16 ...
- mysql主从配置 简书_Mysql主从配置,实现读写分离-Go语言中文社区
转载:https://www.cnblogs.com/alvin_xp/p/4162249.html 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层 ...
- mysql主从配置访问_Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- mysql主从配置对解决并发有用_MySQL主从配置,读写分离
大型网站为了缓解大量的并发访问,要网站实现分布式负载均衡.但是数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果不堪设想.这时 ...
- Windows下MySql主从配置实战教程
Windows下MySql主从配置实战教程 MySql的主从配置教程 主库MySql的安装 1.MySQL的下载 2.MySQL配置文件的编写 3.初始化数据库 4.安装服务 5.启动MySql 6. ...
最新文章
- iOS 字符属性NSAttributedString描述
- error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCR... 2011年08月05日 09:08:15
- pat 团体赛练习题集 L2-008. 最长对称子串
- mysql 查询帖子 用户_我要用sql查询出来,我所发布的帖子和我关注的用户发布的帖子,这个sql该怎么写啊?...
- docker部署django项目、mysql主从搭建、django实现读写分离
- Taro+react开发(50) 小程序触底操作
- idea 热部署时 tomcat处 没有update classes and resource 选项
- image.merge图像有什么变化_图像特征工程:HOG特征描述子介绍
- [NSUserDefaults]的使用:登陆后不再显示登录界面。
- 威纶触摸屏如何组态设置离散量报警及报警历史记录?
- iis6 增加PHP+MYSQL等时,记得 PHP目录要给EVERYONE权限
- U深度U盘启动盘制作教程
- Aftereffect中英文切换技巧
- DSO Framer 使用介绍(ZZ)转
- 百趣代谢组学文献分享 | 建立基于代谢组学的ICU脓毒症患者预后预测模型
- Android应用中捕捉所有点击事件实现
- 四阶巴特沃兹低通滤波器的设计与仿真
- 分享 82个实用的前端开发工具
- 针对电脑进行网络诊断显示“您可能需要与该网络的Internet服务提供商ISP签署协议才能获得访问Internet的权限”问题的解决方法
- python----将当前目录的所有扩展名为“html”的文件修改为扩展名为“htm”的文件。