标签:binlog slave master mysql 集群 docker 节点
docker做主从复制
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
利用docker做宿主机和容器内部同步
主从复制介绍
mysql跟我我们设置的主从节点,将binlog对从数据库中进行推送。根据上图(网上偷的图...)可以看到mysql主节点 只需要开启binlog 对数据做binlog存储
我们的从节点 就会有两个线程 一个是通过io获取主节点binlog,一个是将binlog转化为sql
在slave节点中,它给我们提供了两个线程:分别命名为:SLAVE_IO_RUNNING和SLAVE_SQL_RUNNING
准备工作
一般来说,mysql集群做读写分离,一主多从,通过binlog日志去同步数据。
仅仅模拟数据,我们准备两台虚拟机(centos或ubantu),安装docker环境:
- 首先查看仓库中所有docker版本
yum list docker-ce --showduplicates | sort -r
- 输入命令安装(前提是本机没有其他版本docker)
sudo yum install docker-ce
- 等待几分钟完成之后,查询是否安装成功
docker version
docker安装mysql
- 查询docker仓库中mysql的版本
docker search mysql
- 导入mysql镜像 等待完成
docker pull mysql
- 启动mysql数据库 其中123465是管理员密码,请自行定义。
docker run --name mysql_demo -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
- 使用命令进入
docker mysql docker exec -it dockerid /bin/bash
- 登陆mysql使用命令
mysql -uroot -p
- 输入密码
这时候 说明docker中的mysql 已经安装成功并且启动了
我们需要修改mysql外部映射文件
[mysqld] skip-name-resolve server-id=1 log-bin=mysql-bin binog-do-db=test_db binlog-ignore-db=mysql
这里设置了 skip-name : 连接数据禁用dns 只用ip
server-id : id不重复节点
bin-log : 开启binlog日志
指定主从复制库,忽略哪些库
接着我们需要设置从机的复制权限
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
grant replication slave,replication client on *.* to slave@'192.168.xx.xx' identified by "password" ;
flush privileges;
//master_host 主机
master-log-file master-log-pos在查看状态中获取 retry是重试次数
change master to master_host='192.168.1.1',master_user='slave',master_password='123456',master_port='5555',master-log-file='mysql-bin.000002' ,master-log-pos=154,master_connect_retry=30;
启动后 可以查看主从复制状态:
show master status
show slave status \G;
前面说过 从节点其实是有两个线程我们需要启动他们
start slave
这时,我们就可以给主节点修改数据、从节点数据也会同样更新
思考
主从复制会执行io,如果批量操作crud会导致数据不一致的方式,这种方式该如何处理:
1.zookeeper、redis做分布式锁
2.使用数据库中间件进行解耦,如:mycat
多节点集群mysql时,我们怎么批量部署mysql集群并管理:
如:springboot中我们可以支持动态数据源、and.....
标签:binlog,slave,master,mysql,集群,docker,节点 来源: https://www.cnblogs.com/oldEleven/p/15728503.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。