Golang仿云盘项目-3.1 MySQL主从数据同步(一)

话说,这个课的视频真是缺斤少两。。。

服务架构变迁

image

image

本文来自博客园,作者:Jayvee,转载请注明原文链接://www.cnblogs.com/cenjw/p/16464465.html

环境

  1. Docker安装
  2. 从dockerhub上拉取Mysql镜像 //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

image

解析:

  • --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,转载请注明原文链接://www.cnblogs.com/cenjw/p/16464465.html

2.2 主从mysql配置
打开两个终端窗口,启动待配置的主从mysql
image

2.2.1. 找到将作为主节点的binlog信息

show master status;  # 主mysql里查询

image

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;

image
以下两个都是yes,表明已经复制成功

Slave_IO_Running: Yes 连接主库,读取日志文件到本地
Slave_SQL_Running: Yes 从日志文件中读取sql语句执行

本文来自博客园,作者:Jayvee,转载请注明原文链接://www.cnblogs.com/cenjw/p/16464465.html

测试是否开启同步

  1. 在主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;;
    
  2. 在从mysql查看:

    show tables;
    show slave status\G;
    
  3. 在从mysql往测试表插入一条数据

    insert into tbl_test(user, age) values('james', 40);
    

    image

    查看主mysql状态

    show master status;
    

    image

环境配置参考
[1]//www.cnblogs.com/zmk-c/p/15306600.html