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 ...
随机推荐
- hdu 6006 Engineer Assignment 状压dp
Engineer Assignment Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- day3——两数之和
// 小白一名,0算法基础,艰难尝试算法题中,若您发现本文中错误, 或有其他见解,往不吝赐教,感激不尽,拜谢. 领扣 第2题 今日算法 题干 //给定一个整数数组和一个目标值,找出数组中和为目标值的两 ...
- CentOS7.4用yum安装并配置MySQL5.7
1.配置YUM源 下载MySQL源安装包 wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 安装MySQ ...
- js在数组中查找是否存在某一个数值
目前想到的方法有这么几个 1.indexOf() -> ES5 const array = ['apple', 'banance', 'orange'] array.indexOf('appl ...
- 创建ajax的步骤
第1步:创建XMLHttpRequest对象,也就是创建一个异步调用对象. 第2步:创建一个新的HTTP请求,并指定该HTTP请求的方法.URL以及验证信息. 第3步:设置响应HTTP状态变化的函数. ...
- 常用adb 指令
adb指令 monkey https://www.cnblogs.com/aland-1415/p/6949964.html
- 解决Eclipse中.properties文件中文乱码问题
在.properties文件写注释时,发现中文乱码了,由于之前在idea中有见设置.properties文件的编码类型,便找了找乱码原因 在中文操作系统中,Eclipse中的Java类型文件的编码的默 ...
- Android 音视频深入 十六 FFmpeg 推流手机摄像头,实现直播 (附源码下载)
源码地址https://github.com/979451341/RtmpCamera/tree/master 配置RMTP服务器,虽然之前说了,这里就直接粘贴过来吧 1.配置RTMP服务器 这个我不 ...
- java 8 Lambda
警告: 初学者随笔, 请关闭此网页, 以免浪费你的时间
- [Leetcode 217&219]寻找数组中的重复值Contains Duplicate I & II
[题目1] Given an array of integers, find if the array contains any duplicates. Your function should re ...