一、主从复制原理

MySQL 主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致。每一个主从复制的连接,都有三个线程。拥有多个从库的主库为每一个连接到主库的从库创建一个 log dump 输出线程,每一个从库都有它自己的 I/O 线程和 SQL 线程。

步骤

1、主库会将所有的更新记录保存到Bingarylog文件。

2、每当有从库连接到主库的时候,主库都会创建一个log dump线程发送Binarylog文件到从库。

3、当从库复制开始的时候,从库就会创建两个线程进行处理,一个IO线程,一个SQL线程。

4、IO线程去请求主库的Binarylog文件,并将得到的Binarylog文件写到Relaylog文件中。

5、SQL线程会读取Relaylog文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。

二、工具

1、VMware版本:12.1.0
2、CentOS版本:7.0
3、MySQL版本:5.7.30
4、master服务器:192.168.200.102
5、slave服务器:192.168.200.104

三、配置过程

如果从服务器是克隆的主服务器,那么修改/usr/local/mysql/data下的auto.cnf 文件中 server-uuid值,随便改一个uuid就可以。

1、关闭主从服务器的防火墙,直接永久关闭禁用

systemctl disable firewalld

2、修改主服务器配置文件
vi /etc/my.cnf
追加以下内容:

bind-address=192.168.200.102         #master 服务器地址 
log_bin=mysql-bin   
server_id=1

3、修改从服务器配置文件
vi /etc/my.cnf
追加以下内容:

bind-address=192.168.200.104         #slave 服务器地址 
log_bin=mysql-bin   
server_id=2

4、重启主从MySQL

service mysqld restart

5、master上创建一个测试数据库

$ create database test; 
$ use test; 
$ create table test(id int(11), value varchar(20)); 
$ insert into test values(1, 'aa'),(2, 'bb'),(3, 'cc');

6、master设置授权用户,我们设置root用户

GRANT ALL PRIVILEGES ON . TO ‘root’@’%’;

7、查看master状态

mysql> show master status;

这里得到的mysql-bin.000001和Position值在配置slave的时候会用到。

8、关联mysqldump
(1)、查找数据库安装的目录

find / -name mysql -print

(2)、设置软连接

ln -fs /usr/local/mysql/bin/mysqldump /usr/bin

8、将master中现有的数据导出

mysqldump -u root -p --all-databases --master-data > all.sql

9、将 all.sql 发送到 slave 服务器 tmp 目录下:

$ scp all.sql root@192.168.200.104:/tmp

10、slave 导入 master 数据,使 master-slave 数据保持一致:

在slave中,$ mysql -uroot -p < all.sql

11、使 slave 与 master 建立连接,从而同步:

mysql> change master to     
	-> master_host='192.168.200.102',     
	-> master_user='root',     
	-> master_password='root!',     
	-> master_log_file='mysql-bin.000001',     
	-> master_log_pos=954;
mysql> start slave;  
mysql> show slave status

四、验证

上述过程都完成后,主从复制的配置就好了,可以验证主库插入一条数据,查看从库有没有同步增加。

Logo

更多推荐