本文记录下通过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. 基于redis的分布式锁(转)

    基于redis的分布式锁 1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分 ...

  2. 将python中的一个float变量转成内存的4个字节值

    #coding=utf- from struct import pack,unpack byte=pack('f',1.5) print(byte) print([i for i in byte]) ...

  3. java笔记 -- 数组

    概念: 数组是一种数据结构, 用来存储同一类型值的集合. 通过一个整型的下标可以访问数组中的每一个值. 声明: int[] a(推荐,将类型int[](整形数组)和变量名分开了) 或者int a[] ...

  4. TreeMap/LinkedHashMap/HashMap按键排序和按值排序

    今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map 在讲解Map排 ...

  5. app在admin中显示成我们想要的中文名

    在django的开发中,很多时候我们希望app在admin中显示成我们想要的中文名,而不是显示默认的app_label名称. 比如我们有一个blog应用,在我们的blog app目录下面,默认会生成一 ...

  6. 转载&修改:赶集mysql军规

    个人认为以下军规主要为了适应海量数据场景,对于业务复杂性系统并一定完全按照此军规   一,核心军规 不在数据库做计算,cpu计算务必移至业务层 控制单表数据量,单表记录控制在千万级 控制列数量,字段数 ...

  7. js在数组中查找是否存在某一个数值

    目前想到的方法有这么几个 1.indexOf()  -> ES5 const array = ['apple', 'banance', 'orange'] array.indexOf('appl ...

  8. 使用Composer安装Symfony

    最近的一些项目都会使用symfony框架,首先的第一个问题就是symfony框架的下载及安装,symfony要求的php环境5.5以上的,需要php版本的切换.使用的是windows版的安装起来较为麻 ...

  9. what is API

    JavaScript — A high-level scripting language built into browsers that allows you to implement functi ...

  10. JDK7动态代理源码分析

    IObject proxy = (IObject) Proxy.newProxyInstance(IObject.class.getClassLoader(), new Class[]{IObject ...