docker搭建mysql主从

前言:

  1. 主从同步的介绍:
    实现数据自动同步的服务架构
    主服务器(master):接收客户端的访问连接
    从服务器(slave):同步注服务器的数据
  2. 主从同步的原理:
    主服务器开启blog日志
    从服务器开启slave_IO线程复制master服务器中的SQL语句到本机的relay_log文件中
    从服务器中的slave_SQL线程执行relay_log文件中的SQL语句达到同步数据的效果

环境准备:

由于只有一台服务器,我们使用docker来搭建mysql主从同步,docker的部署与实际环境是一样的
镜像:mysql:5.7
下载镜像

docker pull mysql:5.7

使用docker-compose启动两个数据库

version: "3.7"
services:
  mysql1:
    image: mysql:5.7
    container_name: mysql1
    environment:
      - MYSQL_ROOT_PASSWORD=wordpress
    volumes:
      - ~/mysql1/date:/var/lib/mysql:rw
      - ~/mysql1/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf:rw
  mysql2:
    image: mysql:5.7
    container_name: mysql2
    environment:
      - MYSQL_ROOT_PASSWORD=wordpress
    volumes:
      - ~/mysql2/date:/var/lib/mysql:rw
      - ~/mysql2/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf:rw

创建挂载目录与准备配置文件

mkdir -p mysql1/date
mkdir -p mysql2/date
cp my.conf mysql1/
cp my.conf mysql2/

备注:如果my.conf是从其他主机down下来的文件,清删除指定pid和指定日志的配置,不然会报错,也可以启动一个mysql容器后从容器中复制配置文件

启动docker-compose
docker-compose -f mysql.yml up -d
docker-compose -f mysql.yml ps

查看容器IP

docker inspect mysql1
docker inspect mysql2

容器规划

mysql1		主服务器		172.28.0.3
mysql2		从服务器		172.28.0.2

部署主从同步

备份主数据库

mysql -h 172.28.0.3 -uroot -pwordpress -e 'create database test'
mysql -h 172.28.0.3 -uroot -pwordpress -e 'show database'
mysql -h 172.28.0.3 -uroot -pwordpress -e 'create table test.test(name char(15),hostip char(15))default charset=utf8'
mysql -h 172.28.0.3 -uroot -pwordpress -e "insert into test.test values('mysql1','172.28.0.3')"
mysql -h 172.28.0.3 -uroot -pwordpress -e "select * from test.test"
mysqldump -h 172.28.0.3 -uroot -pwordpress -A >mysql.sql

导入数据库到mysql2

mysql -h 172.28.0.2 -uroot -pwordpress < mysql.sql
mysql -h 172.28.0.2 -uroot -pwordpress -e "select * from test.test"

备注:配置主从同步前两台数据库的数据需要一致
主服务器mysql1开启binglog日志(修改配置文件)

[mysqld]
server_id=50		#id唯一,0到255之间
log_bin=日志名	#启用binlog日志,并指定日志名
max_binlog_size=XXm		#指定binlog日志大小

重启mysql1

docker restart mysql1

创建同步用户

mysql>create user  xiaosan@"%" identified by 'Abc123...';
mysql>grant replication slave on *.* to xiaosan@'%';
mysql>show master status;

从服务器mysql2配置

[mysqld]
service_id=51

重启容器

docker restart mysql2

从服务器指定主服务器

mysql>change master to
->master_host='172.28.0.3',		#指定主服务器IP
->master_user='xiaosan',		#主服务器授权用户
->master_password='Abc123...',		#主服务器授权用户密码
->master_log_file='c078f1f711e6-bin.000001',		#主服务器binlog日志
->master_log_pos=593;			#日志偏移量、
mysql>start slave;			#启动salve进程
mysql>show slave status\G;		#查看进程

备注: Slave_IO_Running: Yes Slave_SQL_Running: Yes
yes时说明进程已开启

测试

查看从服务器test库的test表

mysql -h 172.28.0.2 -uroot -pwordpress -e "select *from test.test"

主服务器mysql1写入数据

mysql -h 172.28.0.3 -uroot -pwordpress -e "insert into test.test values('mysql2','172.28.0.2')"

mysql2查看是否同步

mysql -h 172.28.0.2 -uroot -pwordpress -e "select *from test.test"

到这里主从同步就搭建好了

你可能感兴趣的:(mysql,docker,数据库)