mysql主从数据库安装

本地docker安装主从mysql数据库

安装mysql主从数据库

安装docker desktop

此处省略

下载mysql镜像

docker pull mysql:8.0.29

创建mysql本地挂载配置文件

  • 创建E:\dockerConfig\mysql\master\conf\my.cnf,文件内容为:
[mysqld]
# 服务器的唯一id,默认值1
server-id=1
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# 二进制日志名,默认binlog
#  log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
#  binlog-do-db=mytestdb
# 设置不需要复制的数据库
#  binlog-ignore-db=mysql
# binlog-ignore-db=infomation_schema
  • 创建E:\dockerConfig\mysql\master\data目录

运行docker容器

运行命令,启动主数据库

docker run -d -p 3307:3306 -v E:/dockerConfig/mysql/master/conf:/etc/mysql/conf.d -v E:/dockerConfig\mysql\master\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master mysql:8.0.29

主数据库设置

# 创建用户数据同步的用户
CREATE USER 'lxb_slave'@'%';
# 设置用户密码
ALTER USER 'lxb_slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 授予用户数据库同步的权限   *。*表示所有数据库的所有表
GRANT REPLICATION SLAVE ON *.* TO 'lxb_slave'@'%';
# 刷新权限
FLUSH PRIVILEGES;

查询master状态

SHOW MASTER STATUS;

在这里插入图片描述

安装从服务器

创建mysql本地挂载配置文件

  • 创建E:\dockerConfig\mysql\slave1\conf\my.cnf,文件内容为:
[mysqld]
# 服务器的唯一id,默认值1
server-id=2
# 中继日志名,默认xxxxxxxxx-relay-bin
#relay-log=relay-bin
  • 创建E:\dockerConfig\mysql\slave\data目录

运行docker容器

运行命令,启动主数据库

docker run -d -p 3308:3306 -v E:\dockerConfig\mysql\slave1\conf:/etc/mysql/conf.d -v E:\dockerConfig\mysql\slave1\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave1 mysql:8.0.29

创建第二个从服务器

  • 创建E:\dockerConfig\mysql\slave2\conf\my.cnf,文件内容为:
[mysqld]
# 服务器的唯一id,默认值1
server-id=3
# 中继日志名,默认xxxxxxxxx-relay-bin
#relay-log=relay-bin
  • 创建E:\dockerConfig\mysql\slave2\data目录

运行docker命令

docker run -d -p 3309:3306 -v E:\dockerConfig\mysql\slave2\conf:/etc/mysql/conf.d -v E:\dockerConfig\mysql\slave2\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave2 mysql:8.0.29

在从机上设置主从关系

  1. 查看主机ip

docker inspect <容器id>

根据容器id可查看容器具体的id

ip地址查看

查看IPAddress属性为172.17.0.2

注意:此ip为容器之间访问的ip,主库访问方式为172.17.0.2:3306,也可使用localhost:3307访问主库

  1. sql命令设置主从关系
CHANGE MASTER TO MASTER_HOST='172.17.0.2',
MASTER_USER='lxb_slave',MASTER_PASSWORD='123456',MASTER_PORT=3306,
MASTER_LOG_FILE='binlog.000002',MASTER_LOG_POS=1075;
  • MASTER_HOST 主数据库ip地址
  • MASTER_USER 主数据库设置中设置的数据库同步用户
  • MASTER_PASSWORD 主数据库设置中设置的数据库同步用户的密码
  • MASTER_PORT 主数据库端口(如果主数据库HOST为localhost,此处为3307)
  • MASTER_LOG_FILE 主数据库SHOW MASTER STATUS命令的文件名
  • MASTER_LOG_POS 主数据库SHOW MASTER STATUS命令的起始位置

分别在slave1和slave2两个从库中执行以上sql命令。

启动主从同步

启动从机复制功能

在两台从服务器中分别执行如下命令启动同步:

START SLAVE;

查看同步状态

在从服务器中执行如下命令。(不要带分号)

SHOW SLAVE STATUS\G

主从同步状态

两个属性都为yes表示主从同步开启成功。如果为no,可查看日志。

测试主从同步

DROP DATABASE IF EXISTS `dbsyncTest`;

CREATE DATABASE  `dbsyncTest` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
USE `dbsyncTest`;

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, 'zhangsan');
INSERT INTO `sys_user` VALUES (2, 'lisi');

SET FOREIGN_KEY_CHECKS = 1;

在主库中执行创建库和表的sql,从可同步创建库和表

遇到的问题

mysql挂载的配置文件server-id未生效问题

执行:SHOW VARIABLES LIKE ‘server_id’; 发现与my.cnf中配置的server-id不一致,都为默认值1

解决方法:

将本地my.cnf设置为只读模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值