本文记录下通过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 实现主从数据库数据同步方案的更多相关文章

  1. Oracle数据库数据同步方案

    一.比较原始的方案:触发器/Job/快照+dblink的方式,可实现同步和定时刷新: 二台不同的数据库服务器,从一台数据库服务器A的一个用户读取另一台数据库服务器B下某个用户的数据,可以通过dblin ...

  2. 在laravel环境下将图片存入MongoDB数据库

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  3. docker环境下solr6.0配置(中文分词+拼音)

    前言:这篇文章是基于之前的“linux环境下配置solr5.3详细步骤”(http://www.cnblogs.com/zhangyuan0532/p/4826740.html)进行扩展的.本篇的步骤 ...

  4. docker环境下solrcloud+zookeeper集群部署教程

    前言:两个月前的16年11月份完成的配置,使用的solr6.1和zookeeper3.4,刚刚写成blog,目前版本可能有小版本的变化. 本例完成结果为:在docker环境下部署solrcloud集群 ...

  5. Mac+Docker环境下xdebug的配置

    由于容器化的需要,前几天我本地也换成了docker环境.就研究了一下docker环境下phpstorm和xdebug的配置. http://www.mmfei.com/?p=453 这个博客给出了一个 ...

  6. Elasticsearch Docker环境下安装

    Elasticsearch Docker环境下安装 Daemon镜像配置的是https://registry.docker-cn.com Linux:vi /etc/docker/daemon.jso ...

  7. docker环境下mysql参数修改

    原文:docker环境下mysql参数修改 需要修改log_bin为on,看了好几个博客说都需要删掉容器重新生成,然而并非如此, 我们可以用docker cp 命令将docker的文件"下载 ...

  8. redis在windows下安装设置密码及主从数据库

    redis在windows下安装设置密码及主从数据库 1.安装 下载解压后,如图所示: 2.配置. 打开redis.windows.conf文件,在此处设置端口和ip: 这里设置持久化: 在这里设置密 ...

  9. Docker环境下Java应用的最大内存和堆内存的设置

    Docker环境下Java应用的最大内存和堆内存的设置 1.  设置应用允许使用的最大内存 通过docker run(创建一个新的容器并运行)命令中设置-m来进行设置.案例如下所示. docker r ...

随机推荐

  1. Linux之DHCP搭建命令集锦

    systemctl start dhcpd        //启动DHCP systemctl enable dhcpd                //配置服务开机启动 ps aux | grep ...

  2. CentOS7服务管理

    1.在/usr/lib/systemd/system目录下建立服务启动文件,文件格式:[root@Centos7 ]# cat /usr/lib/systemd/system/nginx.servic ...

  3. RxJava2

    原文地址 这可能是最好的RxJava 2.x 入门教程(一) 这可能是最好的RxJava 2.x 入门教程(二) 这可能是最好的RxJava 2.x 入门教程(三) 这可能是最好的RxJava 2.x ...

  4. linux mkdir命令

    1 mkdir,创建一个空目录. 比如:mkdir test 2 mkdir -p,递归创建目录. 比如:mkdir -p a/b.迭代创建. 3 mkdir -m 777 d 创建权限为777的目录 ...

  5. 关于微信小程序获取当前位置信息

    小程序开发---获取当前位置信息 一.获取用户地理位置信息 1.配置app.json文件 { "pages": ["pages/index/index"], & ...

  6. JQuery的常用选择器 转

    JQuery的常用选择器 刚开始学JQuery写的如有错误欢迎批评指正 JQuery拥有的选择器可以让我们更快更方便找到想要的元素,然后对相应的元素进行操作 简单介绍一下一些常用的选择器: 1.基本选 ...

  7. Jquery版本对IE浏览器的支持

    浏览器名称 Jquery最低 Jquery最高 IE6 1.0 1.12 IE7 1.0 1.12 IE8 1.0 1.13 jquery各版本下载:https://code.jquery.com/j ...

  8. Response.End ,Response.Redirect、Server.Transfer 引发 “正在中止线程”异常的问题

    google后得知:Response.End 方法终止页的执行,并将此执行切换到应用程序的事件管线中的 Application_EndRequest 事件,同时抛出ThreadAbortExcepti ...

  9. 43. Multiply Strings字符串相乘

    网址:https://leetcode.com/problems/multiply-strings/submissions/ 参考:https://leetcode.com/problems/mult ...

  10. 深度学习梯度反向传播出现Nan值的原因归类

    症状:前向计算一切正常.梯度反向传播的时候就出现异常,梯度从某一层开始出现Nan值(Nan: Not a number缩写,在numpy中,np.nan != np.nan,是唯一个不等于自身的数). ...