实战 MySQL 高可用架构(三)

107 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

三、配置 MySQL 环境

作为演示,我在本机启动了两台 Ubuntu 虚拟机,安装有 docker。因为我们的测试和生产环境是用 Docker 跑的,所以我将环境的镜像打包后,还原到我的虚拟机上面。

3.1 备份和还原 mysql 镜像

保存测试环境的 mysql 镜像

sudo docker save -o mysql.tar  hcr:5000/hschub/hscmysql:0.0.2
​
sudo chmod 777 mysql.tar

两台机器导入镜像

sudo docker load -i mysql.tar

启动容器,需要注意的是需要映射本地文件夹。

sudo docker run -p 3306:3306 --name mysql \
-v /home/hss/mysql/data:/var/lib/mysql \
-v /home/hss/mysql/etc/mysql:/etc/mysql \
-e MYSQL_ROOT_PASSWORD='123456' \
-d 46b

-v 代表映射的文件夹,-d 表示后台运行,46b 代表镜像 id。

进入容器,连接 mysql,node1的mysql 密码是 123456,node2 是 123456

# 查询容器 id
docker ps
​
# 进入 mysql 容器
docker exec -it <容器 id> /bin/bash
​
# 连接 mysql
mysql -u root -p

接下来我们配置 MySQL 的主从架构,需要注意的是后续搭建的主主架构是基于主从架构来的,区别就是修改了一部分配置。

四、配置 MySQL 的主从架构

拓扑结构:

  • 192.168.56.11 node1,主节点
  • 192.168.56.12 node2,从节点

4.1 修改主节点配置文件

修改 /home/hss/mysql/etc/mysql/my.cnf 文件

server_id = 11
log_bin = /var/lib/mysql/log/mysql-bin
binlog-ignore-db=mysql
binlog_format= mixed
sync_binlog=100
log_slave_updates = 1
binlog_cache_size=32m
max_binlog_cache_size=64m
max_binlog_size=512m
relay_log = /var/lib/mysql/log/relay-bin
relay_log_index = /var/lib/mysql/log/relay-bin.index
master_info_repository=TABLE
relay-log-info-repository=TABLE
relay-log-recovery

创建 /home/hss/mysql/data/log/mysql-bin 文件夹

创建 /home/hss/mysql/data/log/relay-bin 文件夹

给两个文件夹加上 777 权限,然后重启 MySQL 容器。

4.2 修改从节点配置文件

和主节点配置类似,需要修改 server_id = 12

4.3 添加主节点 mysql 账户信息

CREATE USER 'vagrant'@'192.168.56.12' IDENTIFIED BY 'vagrant';
​
ALTER USER 'vagrant'@'192.168.56.12' IDENTIFIED WITH mysql_native_password BY 'vagrant'; 
​
GRANT REPLICATION SLAVE ON *.* TO 'vagrant'@'192.168.56.12';
​
FLUSH PRIVILEGES;

4.4 锁主库的表

FLUSH TABLES WITH READ LOCK;

4.5 查看二进制日志文件的位置

记住 File 和 Position,后面会用到。这里 File = mysql-bin.000008,Position = 1020。

4.6 备份数据库,导出为脚本文件

cd /var/lib/mysql
​
mkdir backup
​
mysqldump -uroot -P3306 --all-databases --triggers --routines --events > /var/lib/mysql/backup/all_databases.sql

查看挂载目录下是否有生成 all_databases.sql 文件,如下图所示:

4.7 解除锁定表

UNLOCK TABLES

4.8 从节点还原数据库

mysql -uroot -p -hlocalhost -P3306 < /var/lib/mysql/backup/all_databases.sql

4.9 设置同步信息

在 MySQL 命令行窗口中执行以下命令设置同步信息。这里就是配置主数据库的 IP 地址、Port、用户名、密码,二进制文件名,偏移量。

CHANGE MASTER TO MASTER_HOST='192.168.56.11',
MASTER_PORT=3306,
MASTER_USER='vagrant',
MASTER_PASSWORD='vagrant',
MASTER_LOG_FILE='mysql-bin.000008',
MASTER_LOG_POS=1020;

4.10 启动从数据库的复制线程

在 MySQL 命令行窗口中执行以下命令启动从数据库的复制线程。

START salve;

4.11 查看从数据库的同步状态

SHOW slave status \G

如果 Slave_IO_Running 和 Slave_SQL_Running 显示 Yes,就表示启动同步成功。如下图所示:

在主库上执行以下命令显示当前连接过来的从库线程。

SHOW PROCESSLIST

如下所示,Slave has read all relay log; wating for more updates,说明从库已经同步完了。

使用上面的两个命令,我们可以判断当前的复制情况。

4.12 验证同步功能

下面验证下主从节点之间是否能正常同步数据。

主节点创建 testdb 数据库和 member 表。

刷新下从节点,发现从节点自动创建了 member 表。如下图所示。

然后在主节点插入一条数据,刷新从节点后,发现从节点也自动创建了一条数据。