基于Docker从零到一实操MySql的主从复制

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 我们一开始介绍了如何在docker上安装与启动mysql,以及进入mysql的后台创建数据库与表等;接着我们过了一遍如何基于docker操作mysql 主从库复制。

一、在Docker上安装,启动MySQL

查看docker是否安装成功

docker -v 查看是否已经安装了docker,如下面提示版本信息则是安装了。

➜  ~ docker -v
Docker version 20.10.16, build aa7e414```

查询docker hub 上是否有mysql镜像,
如下 ofiicial 为ok的为官方发布的,一般我们选择就是官方提供的。

docker search mysql
NAME     DESCRIPTION    STARS     OFFICIAL   AUTOMATED
mysql    MySQL is a widely used,   [OK]

使用docker pull mysql 拉去mysql 这里的mysql为上面search 出来的name字段;

安装mysql

➜  ~ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
bd2ec1b01835: Downloading [=========>                                         ]  7.979MB/43.63MB
ec2e560d878c: Download complete
e8397fbbbc3b: Download complete
eff4258297ab: Download complete
137be606bff3: Download complete
0ef6a538fcba: Download complete
a5431fa8c17d: Downloading [========>                                          ]  10.14MB/57.7MB
23af94ba6338: Download complete
87a8250fff28: Downloading [=====>                                             ]  6.919MB/63.78MB
6b7e1aea563b: Waiting

查看mysql镜像

等待⌛️安装完成✅后,docker images -a 查看本地镜像

➜  ~ docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        latest    bdfb0ec4d54a   4 weeks ago   599MB

docker run -it mysql /bin/bash

( 参数 -i -t 等价于 -it 表示insert , 进入 ; /bin/bash 表示 shell 脚本交互界面 )

➜  ~ docker run -it mysql /bin/bash
bash-4.4# ls
bin   dev              etc    lib    media  opt   root  sbin    sys  usr
boot  docker-entrypoint-initdb.d  home    lib64  mnt    proc  run   srv    tmp  var

基于上一步后,查看mysql 的版本

bash-4.4# mysql -V
mysql  Ver 8.1.0 for Linux on aarch64 (MySQL Community Server - GPL)

退出当前窗口🪟,docker 容器也同时推出,docker ps 查看后没有记录

bash-4.4# exit
exit

进入mysql后台操作

启动mysql 后一直运行:

  docker run -p 3306:3306 --name JY_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql

像上述的命令运行的mysql,如果只是平时玩玩是没问题。因为没有做到备份数据记录📝,如果某个(100+150)运行 docker rm -f mysql 后,你的mysql数据也被删除了。

docker Volume(卷)入门

这里就要说说 docker Volume 卷

Docker 卷(Volume)是用于持久化存储数据的一种机制,可以将宿主机上的文件系统目录或者其他容器挂载到容器中,以方便地对数据进行管理和共享。

下面是 Docker 卷的一些特点和使用方法:

  1. 数据持久化:容器运行时的数据保存在卷中,即使容器停止或删除,数据仍然存在。
  2. 数据共享:多个容器可以挂载同一个卷,实现数据共享。
  3. 管理文件系统:Docker 卷可以为容器指定一个特定的文件系统,从而使容器和宿主机之间的文件系统隔离。
  4. 备份和恢复:通过卷,可以将容器的数据备份到宿主机,方便容器的数据管理和恢复。

使用 Docker 卷的步骤如下:

  1. 创建卷:可以使用 docker volume create 命令创建卷,也可以在容器启动时自动创建。
  2. 挂载到容器:使用 -v 或 --mount 参数将卷挂载到容器中,可以指定挂载点和读写权限等参数。
  3. 访问数据:在容器中使用挂载点访问卷中的数据。

例如,下面的命令将创建一个名为 myvolume 的卷,并将其挂载到名为 mycontainer 的容器的 /data 目录中:

docker volume create myvolume
docker run -v myvolume:/data --name mycontainer myimage

这样,在容器中访问 /data 目录时,就可以访问到卷中的数据了。(也就是数据共享的味道了)如果需要备份或恢复数据,可以使用 docker cp 命令将容器中的数据备份到宿主机上,或者将宿主机上的数据恢复到容器中

看了上述的基本认识,我们回到关于 250 删了我们的mysql的数据备份问题。我们照着上面画葫芦,加上 -v 以及备份的路径,

➜  ~ docker run -p 3306:3306 --name mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql

这里我提前安装了 docker desktop 工具,下面就是带了 -v 也就是有卷和没卷的创建的mysql,明显带 -v 的数据大小大了很多。也可以使用 docker inspect my_container 查看;
image.png

然后我们 docker ps 查看,exec 进入操作一下

 docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
0fbfa37c3274   mysql     "docker-entrypoint.s…"   42 minutes ago   Up 42 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

docker exec -it 0fbfa37c3274 /bin/bash

我们进入mysql后台 ,然后就是创建表,插入数据,这些操作就和在mysql操作一样

bash-4.4# mysql -u root -p
Enter password:
mysql> create DATABASE TESTDB;
mysql> CREATE TABLE IF NOT EXISTS `test_tbl`(
   `testdb_id` INT UNSIGNED AUTO_INCREMENT,
   `testdb_title` VARCHAR(100) NOT NULL,
   `testdb_author` VARCHAR(40) NOT NULL,
   `testdb_date` DATE,
   PRIMARY KEY ( `testdb_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> use TESTDB;
Database changed
mysql> INSERT INTO test_tbl 
    -> (testdb_title, testdb_author, testdb_date)
    -> VALUES
    -> ("learn docker use mysql", "chayedan", NOW());
mysql>  SHOW DATABASES;
mysql>  SHOW DATABASES LIKE '%DB';

上面依次是创建数据库 TESTDB,创建表 test_tbl,插入数据,显示数据库;

MySql的主从复制

在docker环境中设置MySQL主从复制,需要以下步骤:

1. 创建MySQL主从复制的网络

docker network create mysql-replication

2. 创建MySQL主服务器

docker run -d --name mysql-master \
  --network mysql-replication \
  -e MYSQL_ROOT_PASSWORD=master-pass \
  -e MYSQL_REPLICATION_USER=repl \
  -e MYSQL_REPLICATION_PASSWORD=repl-pass \
  mysql:latest \
  --server-id=1 \
  --log-bin=mysql-bin \
  --binlog-do-db=testdb \
  --binlog-ignore-db=mysql \
  --gtid-mode=ON \
  --enforce-gtid-consistency=ON \
  --log-slave-updates=ON \
  --auto-increment-offset=1 \
  --auto-increment-increment=2

3. 创建MySQL从服务器

docker run -d --name mysql-slave \
  --network mysql-replication \
  -e MYSQL_ROOT_PASSWORD=slave-pass \
  -e MYSQL_REPLICATION_USER=repl \
  -e MYSQL_REPLICATION_PASSWORD=repl-pass \
  mysql:latest \
  --server-id=2 \
  --log-bin=mysql-bin \
  --binlog-do-db=testdb \
  --binlog-ignore-db=mysql \
  --gtid-mode=ON \
  --enforce-gtid-consistency=ON \
  --relay-log=mysql-relay-bin \
  --log-slave-updates=ON \
  --read-only=ON \
  --auto-increment-offset=2 \
  --auto-increment-increment=2 \
  --master-info-repository=TABLE \
  --relay-log-info-repository=TABLE \
  --replicate-do-db=testdb

4. 配置主从同步

在主服务器上创建一个用户和密码,用于从服务器连接到主服务器。在主服务器上执行以下命令:

CREATE USER 'repl'@'%' IDENTIFIED BY 'repl-pass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

然后,在从服务器上执行以下命令:

CHANGE MASTER TO
  MASTER_HOST='mysql-master',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl-pass',
  MASTER_AUTO_POSITION=1;
START SLAVE;

5.测试主从同步

在主服务器上创建一个测试数据库和表:

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL
);
INSERT INTO users (name) VALUES ('Alice'), ('Bob'), ('Charlie');

然后,在从服务器上查询该表:

USE testdb;
SELECT * FROM users;

如果返回结果与主服务器上的结果一致,则说明主从同步已经成功。


总结

我们一开始介绍了如何在docker上安装与启动mysql,以及进入mysql的后台创建数据库与表等;接着我们过了一遍如何基于docker操作mysql 主从库复制。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
565 82
|
2月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
162 28
|
2月前
|
Ubuntu 关系型数据库 MySQL
在Ubuntu系统的Docker上安装MySQL的方法
以上的步骤就是在Ubuntu系统的Docker上安装MySQL的详细方法,希望对你有所帮助!
286 12
|
3月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
181 16
|
4月前
|
SQL 网络协议 关系型数据库
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
170 40
|
4月前
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
296 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
|
1月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
1月前
|
存储 关系型数据库 MySQL
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
本文详细介绍了在 MySQL 中创建数据库和表的方法。包括安装 MySQL、用命令行和图形化工具创建数据库、选择数据库、创建表(含数据类型介绍与选择建议、案例分析、最佳实践与注意事项)以及查看数据库和表的内容。文章专业、严谨且具可操作性,对数据管理有实际帮助。
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
|
1月前
|
SQL 关系型数据库 MySQL
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
这是一份详细的MySQL安装与配置教程,适合初学者快速上手。内容涵盖从下载到安装的每一步操作,包括选择版本、设置路径、配置端口及密码等。同时提供基础操作指南,如数据库管理、数据表增删改查、用户权限设置等。还介绍了备份恢复、图形化工具使用和性能优化技巧,帮助用户全面掌握MySQL的使用方法。附带常见问题解决方法,保姆级教学让你无忧入门!
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!