1)、Mysql的主从同步就是当master(主库)发生数据变化的时候,会实时同步到slave(从库)。
2)、主从复制可以水平扩展数据库的负载能力,容错,高可用,数据备份。
3)、不管是delete、update、insert,还是创建函数、存储过程,都是在master上,当master有操作的时候,slave会快速的接受到这些操作,从而做同步。
1)、mysql主从复制用途
●实时灾备,用于故障切换
●读写分离,提供查询服务
●备份,避免影响业务
2)、主从部署必要条件:
●主库开启binlog日志(设置log-bin参数)
●主从server-id不同
●从库服务器能连通主库
用 docker search mysql 命令来查看可用版本
拉取一个你需要的版本:
docker pull mysql:5.7
查看镜像:
docker images
3306端口前面的端口是容器映射到宿主机的端口,外部访问端口,映射端口时注意端口不要冲突。
Master库:
docker run -p 3339:3306 --name main_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
Slave库:
docker run -p 3340:3306 --name slave_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
通过docker exec -it 35d587e3438a /bin/bash命令进入到Master容器内部,也可以通过docker exec -it main_mysql /bin/bash命令进入。3330ed3c6cde是容器的id,而main_master是容器的名称。
cd /etc/mysql切换到/etc/mysql目录下,然后vi my.cnf对my.cnf进行编辑。
报错:
bash: vi: command not found,
升级系统解决:
apt-get update
apt-get install vim命令安装vim
在my.cnf中添加如下配置:
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
service mysql restart
docker start main_mysql
下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
进入容器:
docker exec -it main_mysql
连接数据库:
mysql -u root -p 123456
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
基本操作和主数据库一样
cd /etc/mysql修改从数据库的my.cnf配置文件:
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
配置完成后也需要重启mysql服务和docker容器,操作和配置Master(主)一致。
service mysql restart
docker start slave_mysql
在Master进入mysql,执行show master status;
File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。
master_host查询 后面跟容器名字或者容器ID:
docker inspect --format='{
{
.NetworkSettings.IPAddress}} main_mysql
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 617, master_connect_retry=30;
show slave status \G;
Slave_IO_Running: No
Slave_SQL_Running:No
因为此时从数据库还未开启主从服务
start slave;
show slave status \G;
连接主数据库,创建数据库
进入主库,创建一个mysql数据库:
create database gene
操作Master库则Slave库跟着也会变化,表示主从配置 搭建完成。
先停掉主从模式:
stop slave;
#表示跳过第n步错误,n就是后面的数字
set global sql_slave_skip_counter =1;
再次启动主从:
start slave;
之后再用mysql> show slave status\G 查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
主从同步状态恢复正常