1.主从复制原理:
mysql主(master)从(slave)复制的原理:
(1)master讲数据改变记录到二进制日志(binary log)中,也即是配置文件log-bin指定的文件(这些记录叫做二进制事件,binary log events)
(2)slave讲master的binary log events拷贝到他的中继日志(relay log)
(3)slave重做中继日志的事件,将改变反映它自己的数据(数据重演)
总结:主库(master)中有一个二进制文件通过I/O线程关联到从库中的二进制二件,从库中通过SQL线程来完成对主库的复制。
主从配置注意点:
主DBserver和从DBserver数据库的版本一致
主DBserver和从DBserver数据库一致
主DBserver尅器二进制日志,主DBserver和从DBserver的server_id都必须唯一
2.搭建主库:
1)创建目录,并设置权限:
mkdir /data/mysql/master01 -p
cd /data/mysql/master01
mkdir conf data
chmod 777 * -R
或者直接使用xftp进行创建:
2)配置文件的创建:
cd /data/mysql/master01/conf
vim my.cnf
下面是需要在my.cnf里输入的内容:
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1
sql_mode=‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’ #防止出现1055的错误
3)创建容器:
docker create --name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
注:这里主要是用docker镜像来完成的,直接使用压缩包也是可以完成的。
安装完成
4)启动docker容器:
docker start percona-master01 && docker logs -f percona-master01
注意点:在启动docker的时候,会出现卡顿的现象,当出现Version: ‘5.7.23-23-log’ socket: ‘/var/lib/mysql/mysql.sock’ port: 3306 Percona Server (GPL), Release 23, Revision 500fcf5就可以直接ctrl+c结束就可以了。
5)通过数据库的连接,创建同步账户以及权限:
create user ‘此处可按照需求填写’@’%’ identified by ‘此处可按照需求填写’;
grant replication slave on . to ‘此处可按照需求填写’@’%’;
flush privileges;
注意:上面要求按照要求填写的一定要一致
6)因为设置了权限,要重新启动docker容器:
docker restart percona-master01 && docker logs -f percona-master01
7)查看master的状态(在数据库中操作):
show master status;
8)查看二进制日志相关的配置项:
show global variables like ‘binlog%’;
9)查看server相关的配置项:
show global variables like ‘server%’;
下面的server_id只有出现的时候,才能说明主库安装成功
3.搭建从库:
1)创建目录:
mkdir /data/mysql/slave01
cd /data/mysql/slave01
mkdir conf data
chmod 777 * -R
2)创建配置文件,并添加内容:
cd /data/mysql/slave01/conf
vim my.cnf
–添加到上面的文件里–
[mysqld]
server-id=2 #服务 id,不可重复
sql_mode=‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’ #防止出现1055的错误
3)创建mysql容器:(注意端口号:)
docker create --name percona-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v /data/mysql/slave01/conf:/etc/my.cnf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
4)启动docker:
docker start percona-slave01 && docker logs -f percona-slave01
5)设置master相关信息:(在数据库中设置)
set sql_mode = ‘’;
set sql_mode = ‘NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES’;
CHANGE MASTER TO
master_host=‘192.168.80.139’, #此处的IP地址需要设置成自己的LinuxIP地址
master_user=’***’, #就是主库中设置的权限的名称
master_password=’***’, #就是主库中设置的权限的名称
master_port=3306, #主库设置的端口号
master_log_file=‘mysql-bin.000004’, #此处和下面可以在主库中通过show master status;查询到
master_log_pos=154;
6)启动同步:(这个步骤非常重要,是实现主从复制的关键,一定要开启)
start slave;
7)查看master状态:(在主库中进行查询)
show slave status;
注意:下面红框内的必须要都为YES,如果没有或者只有一个的话,只能从第一步重来。
8)测试:
在主库中创建之后,可以直接刷新从库,如果从库出现了和主库创建的数据库一致,就表明mysql集群安装成功。