拉取 MySQL 容器镜像

docker pull mysql:5.7

这里我使用的是 5.7 版本,如果你想要拉取最新版本的镜像,可以使用:

docker pull mysql:latest

下载完成之后我们可以先查看一下镜像是拉取成功

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 f6509bac4980 4 days ago 373MB

创建 MySQL 容器

创建主数据库容器

docker run --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

创建从数据库容器

docker run --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

这里我们分别使用了 3307 和 3308 端口,因为我们本地宿主机器上已经跑了 MySQL 了,3306 端口被占用。

配置主数据库

首先,进入容器:

docker exec -it mysql-master /bin/bash
root@c72a3032f986:/#

连接 MySQL

mysql -u root -p123456

修改 root 可以通过任何客户端连接

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

修改 MySQL 配置文档 /etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 段添加以下配置:

log-bin=mysql-bin    //[必须]启用二进制日志
server-id=1 //[必须]服务器标识ID,每台服务器唯一

配置从服务器

首先,进入容器:

docker exec -it mysql-slave /bin/bash
root@89bdbb5786ab:/#

连接 MySQL

mysql -u root -p123456

修改 root 可以通过任何客户端连接

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

修改 MySQL 配置文档 /etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 段添加以下配置:

log-bin=mysql-bin    //[必须]启用二进制日志
server-id=2 //[必须]服务器标识ID,每台服务器唯一

配置 MySQL 主从复制

首先连接 master 服务器,查看数据库状态:

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

记录 File 的值和 Position 的值,等会配置 slave 服务器的时候要用。

接下来连接 slave 服务器,配置主从复制:

mysql>change master to
master_host='x.x.x.x',
master_user='user',
master_log_file='mysql-bin.000003',
master_log_pos=154,
master_port=3307,
master_password='123456';
Query OK, 0 rows affected, 2 warnings (0.03 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

解释下配置参数

master_host='x.x.x.x' // 这里填 master 主机 ip
master_log_file='mysql-bin.000003', // 这里填写 File 的值
master_log_pos=154,// 这里填写 Position 的值。
mysql> start slave;// 启动从服务器复制功能

如果不小心配置错, 输入 mysql> stop slave; 然后重新录入一遍就可以了。

接下来我们可以检查主从连接状态:

show slave status\G

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

这两个必须是 Yes 为 No 或者 connect 说明没有连接上。

重启容器,使配置生效

分别重启 mysql-master 和 mysql-slave 容器

docker stop mysql-master
docker start mysql-master docker stop mysql-slave
docker start mysql-slave

测试

在 master 容器中创建一张 user 表;

mysql> CREATE TABLE `user` (
-> `user_id` bigint(20) AUTO_INCREMENT,
-> `username` varchar(30) NOT NULL,
-> `password` varchar(30) DEFAULT NULL,
-> PRIMARY KEY (`user_id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.47 sec)

然后在 slave 容器查看:

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user |
+----------------+
1 row in set (0.00 sec)

发现已经同步过来了。

在 master 服务器 user 表插入一条数据:

mysql> insert into user(username, password) values ('test_user', 'test_pass');
Query OK, 1 row affected (0.07 sec)

然后看看 slave 服务器是否有同步

mysql> select * from user;
+---------+-----------+-----------+
| user_id | username | password |
+---------+-----------+-----------+
| 1 | test_user | test_pass |
+---------+-----------+-----------+
1 row in set (0.00 sec)

显然,已经完美同步了。

如果docker容器中没有vim命令安装

mv /etc/apt/sources.list /etc/apt/sources.list.bak

echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib"

>> /etc/apt/sources.list

echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib"

>>/etc/apt/sources.list

echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list

echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib"

>>/etc/apt/sources.list

#更新安装源

apt-get update

apt-get install vim命令即可

使用 docker 搭建 MySQL 主从同步/读写分离的更多相关文章

  1. 使用docker 实现MySQL主从同步/读写分离

    1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...

  2. 聊聊Mysql主从同步读写分离配置实现

    Hi,各位热爱技术的小伙伴您们好,好久没有写点东西了,今天写点关于mysql主从同步配置的操作日志同大家一起分享.最近自己在全新搭建一个mysql主从同步读写分离数据库简单集群,我讲实际操作步骤整理分 ...

  3. Docker容器启动Mysql,Docker实现Mysql主从,读写分离

    Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...

  4. mysql 主从同步-读写分离

    主从同步与读写分离测试 一.  实验环境(主从同步) Master                   centos 7.3              192.168.138.13 Slave     ...

  5. springboot多数据源配合docker部署mysql主从实现读写分离

    本篇主要有两部分: 1.使用docker部署mysql主从 实现主从复制 2.springboot项目多数据源配置,实现读写分离 一.使用docker部署mysql主从 实现主从复制 此次使用的是wi ...

  6. mysql主从同步--读写分离。

    1.mysql 安装参考 https://www.cnblogs.com/ttzzyy/p/9063737.html 2. 主mysql,从mysql 指定配置文件启动 mysqld --defaul ...

  7. 关系型数据库MySQL主从同步-读写分离

    1.环境准备 我的数据库版本是MySQL 5.6 MySQL主机至少两个实例,可以是多实例,可以是多台主机 关闭selinux,关闭防火墙等基础优化 2.安装 yum -y install make ...

  8. mysql数据库主从同步读写分离(一)主从同步

    1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做?  不往从服务器去写了 ...

  9. Mysql主从配置+读写分离

    Mysql主从配置+读写分离     MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. ...

  10. Mysql主从配置+读写分离(转)

       MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了 ...

随机推荐

  1. 2021“MINIEYE杯”(1)

    Start Time : 2021-07-20 12:10:00 End Time : 2021-07-20 17:10:00 1001-Mod, Or and Everything 真正的签到题 题 ...

  2. 使用Apache的ab工具进行压力测试

    Apache附带的ab工具(本机使用的PHP环境是WAMP集成环境,ab工具位于D:\wamp\bin\apache\Apache2.2.21\bin)非常容易使用,ab可以直接在Web服务器本地发起 ...

  3. golang之sync包

    介绍sync包中常用的方法, - sync:提供基本的同步原语(比如Mutex.RWMutex.Locker)和 工具类(Once.WaitGroup.Cond.Pool.Map) - sync/at ...

  4. SharpZipLib解压.tar.gz

    上一篇文章我们说了如何用SharpZipLib来压缩.tar.gz,这篇文章我们来看看如何解压. 直接上代码: using ICSharpCode.SharpZipLib.GZip; using IC ...

  5. GodoOS 入选 Gitee 最有价值开源项目

    2024年11月1日,GodoOS荣耀地入选了GVP--Gitee最有价值开源项目.在GVP平台收录的418个杰出项目中,GodoOS作为唯一一款用GO语言开发的.维护中的跨平台webOS的桌面应用, ...

  6. 3-XSS渗透与防御

    1.HTTP协议回顾 XSS又名跨站脚本攻击 web页面登陆页面,往往有一个"记住密码"功能 ---> Cookie 1.1 HTTP流程 1.2 HTTP特点: 请求应答模 ...

  7. 德承工控机DX-1200 成功适配2024年6月6日发布的国产开源系统OpenEuler 24.03 LTS

    基础软件双子星:欧拉系统(OpenEuler)& 鸿蒙系统(OpenHarmony),鸿蒙系统常应用在华为的手机和平板电脑上,大众也较为熟悉,是面向消费电子产品领域的系统:而欧拉系统则是面向服 ...

  8. datagridview点击列头对当前列进行排序的功能无效

    DataGridView 的默认行为是支持通过单击列头对列进行排序,但在以下情况下可能会取消该功能或无法使用: 1. 绑定的数据源不支持排序 如果 DataGridView 的数据源是绑定到一个不支持 ...

  9. Three.js案例-360全景房看

    在 360° 看房功能中,我们需要在浏览器中创建一个类似虚拟现实的场景,使得用户能够查看环境的每一个角落.这一功能的实现本质上是利用 球体映射技术,即通过将全景图作为纹理贴图映射到一个反向的球体上,用 ...

  10. Mplus数据分析:分段潜增长模型,看jama如何玩转纵向数据的轨迹

    今天给大家介绍分段潜增长模型的原理和做法,之前我有给大家写增长混合和潜增长,它们的主要的局限在于轨迹都是连续的不能分段,在于对phasic的现象把握其实还是不够的,比如儿童认知的发展,按照理论,它是可 ...