Golang仿云盘项目-3.1 MySQL主从数据同步(一)
话说,这个课的视频真是缺斤少两。。。
服务架构变迁
本文来自博客园,作者:Jayvee,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/16464465.html
环境
- Docker安装
- 从dockerhub上拉取Mysql镜像 https://hub.docker.com/_/mysql
配置主从节点
1.创建文件夹及文件
❯ mkdir -p ~/mysql/master/conf
❯ cd ~/mysql/master/conf
❯ vim my.cnf
输入:
[mysqld]
#主数据库端ID号(为1时表示为master,其中master_id必须为1到232-1之间的一个正整数值,主从server-id不能一样)
server_id = 1
#开启二进制日志
log-bin = mysql-bin
❯ mkdir -p ~/mysql/slave/conf
❯ vim my.cnf
[mysqld]
server-id=2
relay-log=relaylogs
2. 基于日志binlog方式
2.1 主从mysql挂载启动
# 主节点挂载启动
docker run --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/cenjw/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /home/cenjw/mysql/master/data:/var/lib/mysql -d mysql
# 从节点挂载启动
docker run --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/cenjw/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf -v /home/cenjw/mysql/slave/data:/var/lib/mysql -d mysql
解析:
--name
容器名 给容器取名字为mysql-master-p
端口1:端口2 端口1是对外暴露的端口(即宿主机的端口),端口2 是mysql端口-e
MYSQL_ROOT_PASSWORD=密码 即root用户的密码-d mysql
代表后台运行我们的mysql-v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf
代表将宿主机/home/docker/mysql/master/conf/my.cnf
配置文件挂载到 mysql容器的/etc/mysql/my.cnf
下-v /home/docker/mysql/master/data:/var/lib/mysql
代表将宿主机/home/docker/mysql/master/data
配置文件挂载到 mysql容器的/var/lib/mysql
下- 指定了容器中指定目录挂载到宿主机上的某个目录,这样做的目的在于防止容器中配置的数据丢失,因为docker容器在重启之后是不会保留前一次在其内部运行的相关数据的;
本文来自博客园,作者:Jayvee,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/16464465.html
2.2 主从mysql配置
打开两个终端窗口,启动待配置的主从mysql
2.2.1. 找到将作为主节点的binlog信息
show master status; # 主mysql里查询
2.2.2 在主mysql中创建账户
然后我们需要为从服务器创建一个可以用来master服务器的账户,也就是创建一个专门用来复制binlog的账号,并且赋予该账号复制权限,其命令如下:
# 创建reder用户
CREATE USER 'reader'@'%' IDENTIFIED WITH mysql_native_password BY 'reader';
# 赋予权限
GRANT REPLICATION SLAVE ON *.* TO 'reader'@'%';
# 刷新权限
flush privileges;
2.2.3 到从节点,配置master信息
CHANGE MASTER TO MASTER_HOST='172.20.10.9',MASTER_USER='reader',MASTER_PASSWORD='reader',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=0;
MASTER_HOST 通过ifconfig查看你本机地址
MASTER_LOG_POS=0:表示预置从最开始的地方复制binlog
2.2.4 查看是否配置成功
#开启复制
start slave;
#查看复制有无成功
show slave status\G;
以下两个都是yes,表明已经复制成功
Slave_IO_Running: Yes 连接主库,读取日志文件到本地
Slave_SQL_Running: Yes 从日志文件中读取sql语句执行
本文来自博客园,作者:Jayvee,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/16464465.html
测试是否开启同步
-
在主mysql创建test1数据库和test表
create database test1 default character set utf8; create table tbl_test(user varchar(64) not null, age int(3) not null) default charset utf8;;
-
在从mysql查看:
show tables; show slave status\G;
-
在从mysql往测试表插入一条数据
insert into tbl_test(user, age) values('james', 40);
查看主mysql状态
show master status;
报错
参考https://www.cnblogs.com/Courage129/p/14169251.html
本文来自博客园,作者:micromatrix,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/16464465.html
posted on 2022-07-12 17:11 micromatrix 阅读(399) 评论(0) 编辑 收藏 举报