Docker + MySQL 主从环境搭建
环境说明
- Docker
- Ubuntu/CentOS
- MySQL v8.0.11
1. 配置my.cnf
my.cnf
(部分老版本可能是my.ini
)是MySQL核心配置文件。首先,在任意挂载目录下新建*.cnf
文件(这里的*代表可以是任意的文件名称)。如果你的mysql是下载安装的,请找到my.cnf
并参考如下配置:
[mysqld] log-bin=mysql-bin //启用二进制日志 server_id=xxx //xxx代表唯一ID,默认是1。特别注意,当前版本这里是server_id而不是server-id,有些版本可能会不一样
-
实战示例
- 在
/root/mysql/conf/master/
新建master.cnf
,配置如下:
[mysqld] log-bin=mysql-bin server_id=100
- 在
/root/mysql/conf/slave/
新建slave.cnf
,添加如下:
[mysqld] log-bin=mysql-bin server_id=200
- 在
2. 运行MySQL
2.1 master(主库)
docker run --name mysql-master -v /root/mysql/conf/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10000:3306 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
2.2 slave(从库)
docker run --name mysql-slave -v /root/mysql/conf/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10001:3306 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
注意,当前mysql版本是8.0.11,不同的版本之间可能存在差别,docker可以拉取指定版本的mysql Image,命令:docker pull mysql:8.0.11
3. 新建账号
3.1 在 master 上创建复制账号
// 1.进入主库容器 docker exec -it mysql-master bash // 2.登录mysql mysql -uroot -proot // 3.rep表示复制账号;<salve_ip>可修改为%,代表任意的主机;`IDENTIFIED BY`后面代表rep用户的认证密码 CREATE USER 'rep'@'<salve_ip>' IDENTIFIED WITH mysql_native_password BY 'reppassword'; GRANT REPLICATION SLAVE ON *.* TO 'rep'@'<salve_ip>';
3.2 获取并记录File
和Position
信息
执行show master status;
即可
4. 配置连接
- 配置 slave 连接 master
// 1.进入从库容器 docker exec -it mysql-slave bash // 2.登录mysql mysql -uroot -proot // 3.配置主库认证信息,<File>和<Position>同上 CHANGE MASTER TO MASTER_HOST='<master_ip>',MASTER_PORT=10000,MASTER_USER='rep',MASTER_PASSWORD='reppassword',MASTER_LOG_FILE='<File>',MASTER_LOG_POS=<Position>;
5. 开启同步
- 开启同步
在 slave 上启动线程:start slave;
- 查看状态
在 slave 上执行命令:show slave status\G;
6. 相关命令
设置从库只读:
set global read_only=1;
。1表示只读,0是读写,但对拥有super权限的账号是不生效的,所以在授权账号的时候应尽量避免添加super权限查看读写情况:
show global variables like "%read_only%";
查看server_id:
show variables like '%server_id%';
7. 踩坑记录
执行show slave status\G;
,发现从库并没有连接上主库,留意到错误信息大致为:“主从库server_id不能一致”,随即查看新增的master.cnf
和slave.cnf
,但并没有发现问题,随即用docker logs mysql-master
查看启动日志,有一行警告大概是这样的:mysql: [Warning] World-writable config file '/etc/mysql/conf.d/master.cnf' is ignored.
,这说明配置文件并没有挂载成功,搜索后得知当文件权限全局可写时,mysql会担心这种文件被其他用户恶意修改,所以会忽略掉这个配置文件,修改文件权限chmod 644 *.cnf
后,再将以上流程重新跑了一遍,问题没有复现。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
百度云加速免费CDN,用免费CDN要谨慎,免费的永远是最贵的
CDN相信做网站和做优化的朋友都不陌生,百度的云加速在业内一直都是享誉很好的口碑,因为可以防御攻击和提升网站被百度收录的几率,所有大多数站长都乐于使用,也因为是百度的产品大多数人都毫无芥蒂的在使用。 什么是CDN? CDN即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。 在国内大平台提供的CDN不算多,大企业也就百度,阿里云,和腾讯。因为大多数做网站都百度比较痴迷所以选择百度云加速的应该占据很大范围,也因为他的防御能力很多企业都比较看好。但是他有个缺点确实致命的,也是因为看到互联网行业很多大佬的网站都在使用,所以也就果断的选择了百度云加速来,来弥补网站速度给网站带来的影响。 也是因为使用频率较多这次确实是一次失败的尝试,一个客户的竞价网站因为正处在行业咨询转化高峰期,不断的被同行攻击网站出现了打不开的情况,于是果断想到的百度云加速的阻隔攻击的功能,结果使用了百度云加速免费CDN,之后网站确实没有攻击了。但是在打开的时候偶然出现宕机情况,本来以为是网站问题,让其他外地朋友 测试了一下网站好着呢?然后去云加速后台更新了一下...
- 下一篇
docker部署redis,清空redis缓存
1、docker ps //查看redis镜像的imgid 2、docker exec -i -t 镜像id或者镜像名称 /bin/bash // 进入容器 3、进入redis-cli目录 执行命令 dbsize && flushall 然后 exit 4、指定key值缓存清理: 1)登录至指定端口的redis服务器 redis-cli -h 127.0.0.1 -p 6379 其中,127.0.0.1可以写成服务器的IP地址,6379为端口号。 2)查看所有key值 keys * 3)删除指定索引的值 del key //例如 del
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)