Docker环境下的Mysql8 实现主从数据库数据同步方案
本文记录下通过MySQL Replication在Docker环境下,通过多个容器 实现数据库主从配置。
MySQL Replication就不多解释了,简单说就是MySQL非常出色的一个功能,该功能将一个MySQL实例中的数据复制到另一个MySQL实例中。整个过程是异步进行的,但由于其高效的性能设计,复制的延时非常小。MySQL复制功能在实际的应用场景中被广泛的应用于保证数据系统数据的安全性和可扩展设计中。想了解更多可从网上找更多的资料。
首先当然是准备好一台安装好docker的linux环境,然后就直接开始:
下文中出现的ip:112.74.41.236 都是我服务器的ip地址,可替换成自己的本机ip。
#配置容器环境
#创建并启动主库 容器
docker run --name master -e MYSQL_ROOT_PASSWORD=123456 -p 9001:3306 -d mysql
#创建并启动从库 容器
docker run --name slave -e MYSQL_ROOT_PASSWORD=123456 -p 9002:3306 -d mysql
#然后docker ps查看启动的容器
#主服务器 数据库配置
#首先进入主库容器内部
#docker exec -it master bash
#然后配置主库docker 容器内mysql配置文件my.cnf,在[mysqld]下修改即可,修改后重启数据库容器,使配置生效:
#vi /etc/mysql/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=1 //[必须]服务器唯一ID,默认是1
#登录主库mysql数据库
#mysql -uroot -p123456
#在主库上创建同步用户并授权
CREATE USER 'replicate'@'112.74.41.236' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'112.74.41.236';
FLUSH PRIVILEGES;
#最后增加远程访问用户 并赋予所有权限,远程访问测试用
CREATE USER yang IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'yang'@'%';
#修复远程登录报报 caching_sha2_password异常
ALTER USER 'yang'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
ALTER USER 'yang'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
#查询master的状态,此处File,Position数据在配置从库时用到
show master status;
#配置从数据库
#首先进入从库容器内部
#docker exec -it slave bash
#然后配置从库docker 容器内mysql配置文件my.cnf,在[mysqld]下修改即可,修改后重启数据库容器,使配置生效:
#vi /etc/mysql/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=2 //[必须]服务器唯一ID,默认是1,从库设置为2
#登录从库mysql数据库
#mysql -uroot -p123456
配置从服务器Slave:(后面两个数据从主库查询得出)
change master to master_host='112.74.41.236',master_port=9001,master_user='replicate',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1593;
start slave;
查询slave的状态,Slave_IO_Running及Slave_SQL_Running进程必须正常运行,即YES状态,否则都是错误的状态
show slave status\G
#最后同样增加远程访问用户 并赋予所有权限,远程访问测试用
CREATE USER yang IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'yang'@'%';
#修复远程登录报报 caching_sha2_password异常
ALTER USER 'yang'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
ALTER USER 'yang'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
至此同步相关配置 已完成,接下来可以测试:
#在主库insert一条记录,从库基本实时从主库同步过来了数据,实现了主从数据同步配置。
#测试脚本
#创建数据库
drop database if exists my_test;
create database my_test;
use my_test;
#创建测试表
CREATE TABLE `user_info` (
`user_num` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`user_id` varchar(36) NOT NULL COMMENT '用户ID',
`user_name` varchar(50) DEFAULT NULL COMMENT '用户名字',
`mobile` varchar(50) DEFAULT NULL COMMENT '手机号码',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`user_status` int(11) DEFAULT NULL COMMENT '状态 0审核中 1有效 2无效',
`create_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`user_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';
#测试插入
insert into user_info values (null, UUID(), 'yang', '15914338482', '123456', 1, now(), now());
Docker环境下的Mysql8 实现主从数据库数据同步方案的更多相关文章
- Oracle数据库数据同步方案
一.比较原始的方案:触发器/Job/快照+dblink的方式,可实现同步和定时刷新: 二台不同的数据库服务器,从一台数据库服务器A的一个用户读取另一台数据库服务器B下某个用户的数据,可以通过dblin ...
- 在laravel环境下将图片存入MongoDB数据库
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- docker环境下solr6.0配置(中文分词+拼音)
前言:这篇文章是基于之前的“linux环境下配置solr5.3详细步骤”(http://www.cnblogs.com/zhangyuan0532/p/4826740.html)进行扩展的.本篇的步骤 ...
- docker环境下solrcloud+zookeeper集群部署教程
前言:两个月前的16年11月份完成的配置,使用的solr6.1和zookeeper3.4,刚刚写成blog,目前版本可能有小版本的变化. 本例完成结果为:在docker环境下部署solrcloud集群 ...
- Mac+Docker环境下xdebug的配置
由于容器化的需要,前几天我本地也换成了docker环境.就研究了一下docker环境下phpstorm和xdebug的配置. http://www.mmfei.com/?p=453 这个博客给出了一个 ...
- Elasticsearch Docker环境下安装
Elasticsearch Docker环境下安装 Daemon镜像配置的是https://registry.docker-cn.com Linux:vi /etc/docker/daemon.jso ...
- docker环境下mysql参数修改
原文:docker环境下mysql参数修改 需要修改log_bin为on,看了好几个博客说都需要删掉容器重新生成,然而并非如此, 我们可以用docker cp 命令将docker的文件"下载 ...
- redis在windows下安装设置密码及主从数据库
redis在windows下安装设置密码及主从数据库 1.安装 下载解压后,如图所示: 2.配置. 打开redis.windows.conf文件,在此处设置端口和ip: 这里设置持久化: 在这里设置密 ...
- Docker环境下Java应用的最大内存和堆内存的设置
Docker环境下Java应用的最大内存和堆内存的设置 1. 设置应用允许使用的最大内存 通过docker run(创建一个新的容器并运行)命令中设置-m来进行设置.案例如下所示. docker r ...
随机推荐
- web 后台返回json格式数据的方式(status 406)
1.在类上使用注解 @RestController public class HttpComentInterface { } 2.在方法是使用注解 @ResponseBody @RequestMap ...
- 使用js写简易的倒计时
步骤 1.获取span标签2.获取现在的时间戳 3.获取未来的时间戳 4.将未来时间戳减去现在的时间戳等于相差的秒数 5.输出到页面 直接上代码 <span name="os" ...
- [冷知识] 连字符-减号-横杠的区别 difference between hyphen-minus-dash
因为早期打印机等宽的原因, 连字符和减号都是 -, 叫做hyphen-minus ,对应Unicode: U+002D(ASCII也是). 现在减号可以是:U+2212, 但编程语言中还是习惯使用U+ ...
- Error during generated code invocation: com.intellij.debugger.engine.evaluation.EvaluateException: Method threw 'java.lang.IllegalAccessError' exception.
场景描述: 再从该数据库中读取数据进行处理的时候,需要将某个字段加入到一个动态的map中,然后需要对该map进行filter过滤,在执行过滤方法的时候报错 Error during generated ...
- 『高性能模型』卷积复杂度以及Inception系列
转载自知乎:卷积神经网络的复杂度分析 之前的Inception学习博客: 『TensorFlow』读书笔记_Inception_V3_上 『TensorFlow』读书笔记_Inception_V3_下 ...
- Linq语句jion on后指定多个条件
代码如下: private void FrmMain_Load(object sender, EventArgs e) { var list1 = Supplier.GetSuppliers(); v ...
- JavaScript进阶系列1:performace和console.time性能测试
测试性能的时候,三种方法: 1.使用new Date() 返回整数值ms var dtStart=new Date(); for(var i=0;i<15000;i++){ i=i; } var ...
- Word中如何删除目录页的页码
---恢复内容开始--- word中插入目录之后想要为每页添加页码,如果我们直接添加页码的话会出现目录是第一页,正文部分的页码是从2开始而不是1,用下面的方法就可以解决 首先让文档中的所有符号可见 第 ...
- 关于微信小程序获取当前位置信息
小程序开发---获取当前位置信息 一.获取用户地理位置信息 1.配置app.json文件 { "pages": ["pages/index/index"], & ...
- Scratch安装使用教程
一.说明 一直听说scratch是一款麻省理工所开发的很好的少儿编程学习工具,一直不是很清楚所谓少儿编程是长什么样所以探究了一下. 二.安装 scratch当前到了3.0版本,3.0版本默认直接是we ...