docker mysql 主从复制实践(亲测可行)
来源:互联网 发布:外文数据库 编辑:程序博客网 时间:2024/06/05 16:31
容器内修改配置模式
1、 假设读者docker已经在centos6.5(或者其他操作系统)上安装好
检测版本:
docker -vDocker version 1.7.1, build 786b29d/1.7.1
2、 拉取镜像
docker pull hub.c.163.com/library/mysql:5.7 # 或其他地方拉取docker images #查看是否有镜像列表
3、启动一个mysql容器
在宿主机路径下新建一个目录用来和docker容器共享数据:
mkdir –p /home/mysql/master-data
启动容器:
docker run \--name=mysql-master \-v /home/mysql/master-data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD='123456' \-d hub.c.163.com/library/mysql:5.7
–name=指定容器名字
-v 宿主机路径:容器内路径
-e 环境变量
-d detach模式
注:宿主机路径必须事先存在
4、配置master
如何进入刚刚启动的那个容器?
docker exec -it mysql-master bash
这样就进入到一个装好mysql的容器中了,你可以执行命令试试:
mysql –u root –p输入密码show databases;use mysql;show tables;exit;
现在我们要修改下mysql的配置,作为master
cd /etc/mysql/conf.d
在这个目录下修改或者新增master.cnf(用vi命令)
由于mysql官方镜像没有安装vi,我们还需先安装:
apt-get update && apt-get install vim
安装好后,执行:vi master.cnf
输入内容如下:
[mysqldump]user=rootpassword='123456'[mysqld]max_allowed_packet=8Mlower_case_table_names=1character_set_server=utf8max_connections=900max_connect_errors=600server-id=1log-bin=mysql-binslow_query_log=1long_query_time=1log_error
5、重启master并授权slave
回到宿主机上执行:
docker restart mysql-master
再次进入容器,登录mysql,
(
mysql –u root –p输入密码
)
执行下列语句:
授权slave可以进行数据的复制:GRANT REPLICATION SLAVE ON *.* TO 'rep1'@'%' IDENTIFIED BY '123456';
把在任意对象上的复制权限授予来自任何ip的rep1账户,其使用的密码是123456
查看并记录主mysql信息:
mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000001 | 154 | | | |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)
记下file和position的值.
6、回到宿主机,启动另一个容器
同第3步:
在宿主机路径下新建一个目录用来和docker容器共享数据:
mkdir –p /home/mysql/slave1-data
启动容器:
docker run \--name=mysql-slave1\-v /home/mysql/ slave1-data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD='123456' \-d hub.c.163.com/library/mysql:5.7
注:--link mysql-master:master
链接到主mysql。主mysql的容器地址可以用master表示。
7、配置slave,同第4步,进入到mysql-slave1
cd /etc/mysql/conf.d
vi slave1.cnf
输入如下内容:
[mysqldump]user=rootpassword='123456'[mysqld]max_allowed_packet=8Mlower_case_table_names=1character_set_server=utf8max_connections=900max_connect_errors=600server-id=2log-bin=mysql-binslow_query_log=1long_query_time=1log_error
然后退回到宿主机重启:
docker restart mysql-slave1
这时MySQL的主从服务器都在运行中,需要读者自行保证两边的数据相同。只有当两台服务器的数据都一样的时候,才能建立主从复制连接。
8、配置从库连接主库, 再次进入slave容器,登录mysql,在从库上执行
mysql> change master to master_host=’master’,master_port=3306, master_user=’rep1’,master_password=’123456’, master_log_file='mysql-bin.000003', master_log_pos=437;
最后两项 MASTER_LOG_FILE
和 MASTER_LOG_POS
就是刚才我们在master(show master status)上记录下来的值
然后在从库启动 slave 线程开始同步
mysql>START SLAVE;
在从库 查看同步状态
mysql>show slave status;
如果看到 Slave_Io_State
字段有 :
Waiting for master to send event ...
那就成功了 ! ! !
9、验证
只要在主服务器数据库插入或修改数据,就可以自动复制到从服务器上了
数据卷的使用
在第3和第6步中,我们都是进入容器去编辑配置文件,实际上,也可以在宿主机上写好配置文件然后共享给容器,这样可以不用在容器里面去写配置文件,也不用切来切去如下:
宿主机:
mkdir –p /root/mysql-master/cnfdirvi /root/mysql-master/cnfdir/master.cnf
键入如下内容:
[mysqldump]user=rootpassword='123456'[mysqld]max_allowed_packet=8Mlower_case_table_names=1character_set_server=utf8max_connections=900max_connect_errors=600server-id=1log-bin=mysql-binslow_query_log=1long_query_time=1log_error
然后通过共享数据卷的形式,传入配置文件:
启动MySQL容器并挂载宿主机共享数据卷到容器
docker run \ --name mysql-master2 \ -e MYSQL_ROOT_PASSWORD='123456' \ -v /root/mysql-master/datadir/:/var/lib/mysql/ \ -v /root/mysql-master/cnfdir/:/etc/mysql/conf.d/ \ -d 573ca163b053
注意-v /root/mysql-master/cnfdir/:/etc/mysql/conf.d/
Slave是类似的:
mkdir –p /root/mysql-slave1/cnfdirvi /root/mysql-slave1/cnfdir/slave1.cnf
键入以下内容:
[mysqldump]user=rootpassword='123456'[mysqld]max_allowed_packet=8Mlower_case_table_names=1character_set_server=utf8max_connections=900max_connect_errors=600server-id=2log-bin=mysql-binslow_query_log=1long_query_time=1log_error
然后启动slave1:
docker run \ --name mysql-slave1 \ -e MYSQL_ROOT_PASSWORD='123456' \ -v /root/mysql-slave1/datadir/:/var/lib/mysql/ \ -v /root/mysql-slave1/cnfdir/:/etc/mysql/conf.d/ \ —link mysql-master2:master \ -d 573ca163b053
两个库都启动了,进入主库去授权、查看日志文件名和位置;进入从库去连接主库并且开启同步。
- docker mysql 主从复制实践(亲测可行)
- 以Docker方式实现MySql 主从复制(实践篇)
- Docker中Mysql主从复制实践总结
- docker+mysql主从复制
- mysql主从复制实践
- Mysql主从复制实践
- mysql主从复制实践
- MySQL主从复制实践
- 实践mysql主从复制
- docker安装mysql主从复制
- Mysql主从复制实践手册
- CentOS 7 下MySQL 5.7.12主从复制架构配置记录(亲自验证可行)
- Docker Compose搭建mysql主从复制
- 通过docker实现mysql主从复制
- Linux MySQL主从复制(Replication)实践配置
- mysql主从复制【实践后可用】
- MySQL 经典架构之 主从复制 实践
- MySQL主从复制(Master-Slave)实践
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- new和malloc的区别
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Xor
- Oracle第一次测试分析
- centos svn服务端的部署和同步web端
- docker mysql 主从复制实践(亲测可行)
- getContextPath、getServletPath、getRequestURL、getRealPath的区别
- Thrift之C++ 异步连接池实例
- spring boot 加入 spring-security配置 角色前缀 静态资源访问
- tf.squeeze() Function函数作用
- 前端相关面试题总结
- 第九次CCF 压缩编码
- 二分搜索算法
- PowerDesigner15的PDM中表图显示NAME和CODE