MySQL的主从复制及读写分离

西特张

关注

阅读 87

2021-09-25

环境

系统 centos7.2
数据库 docker官方最新的mariadb
测试工具 navicate

步骤

  1. docker安装mariadb
  • 搜索mariadb镜像
  • 拉取官方镜像
docker search mariadb
docker pull mariadb

  1. 创建目录
  • 创建根目录(双活模式)
  • 创建应用目录conf、master-1、master-2
mkdir /DATA/mariadb/MM -p
cd  /DATA/mariadb/MM
mkdir conf
mkdir master-1
mkdir master-2

  1. 创建容器
  • 端口映射:33066、33067
  • 卷映射:master-1、master-2
  • 容器命名:mariadb-mm-1、mariadb-mm-2
  • 创建容器的过程可以参考:https://www.jianshu.com/p/ec52b18698d4
docker run -itd --privileged=true -p 33066:3306 -v /DATA/mariadb/MM/master-1/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mariadb-mm-1 mariadb
docker run -itd --privileged=true -p 33067:3306 -v /DATA/mariadb/MM/master-2/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mariadb-mm-2 mariadb
docker ps

  1. 配置双活模式
  • 从docker容器中拷贝出配置文件,修改后,重新拷贝到docker容器中;
  • 主MySQL创建用户,并分配权限:replication slave ,replication client
  • 从数据库,修改master的配置:change master

1. 主MySQL,拷贝容器中的配置文件:my.cnf

mkdir /DATA/mariadb/MM/conf/master-1 -p
cd /DATA/mariadb/MM/conf/master-1
docker cp mariadb-mm-1:/etc/mysql/my.cnf ./
vim my.cnf

2. 在my.cnf中的 [mysqld] 下面添加如下内容并保存

skip_name_resolve=ON
innodb_file_per_table=ON
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index

3. 将修改后的my.cnf拷贝到容器中,并重启容器

docker cp /DATA/mariadb/MM/conf/master-1/my.cnf mariadb-mm-1:/etc/mysql/my.cnf
docker restart mariadb-mm-1

下图为修改配置后的文件目录变化,可以看出,多了两个文件:master-bin.000001、master-bin.index


4. 进入容器,并进入mysql控制台,创建用户并授权

docker exec -it mariadb-mm-1 bash
mysql -uroot -p123456
grant replication slave ,replication client on *.* to 'slave'@'%' identified by '123456';
flush privileges;

5. 查看主MySQL的master信息,并保存,等到配置slave服务器时用到

show master status;
show master status\G;

6. 主MySQL配置完成后,配置slave服务器

mkdir /DATA/mariadb/MM/conf/master-2 -p
cd /DATA/mariadb/MM/conf/master-2
docker cp mariadb-mm-2:/etc/mysql/my.cnf ./
vim my.cnf
skip_name_resolve=ON
innodb_file_per_table=ON
server-id=2
relay_log=slave_relay_bin

docker cp ./my.cnf mariadb-mm-2:/etc/mysql/my.cnf
docker restart mariadb-mm-2
docker exec -it mariadb-mm-2 bash
mysql -uroot -p123456

7. 从数据库,change master语句,并开启 slave 服务

stop slave;
change master to master_host='106.13.135.66',master_port=33066,master_user='slave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=659;
start slave;
show slave status\G;


至此为止,一主一从模式,已经完成。


精彩评论(0)

0 0 举报