目录
一、主从复制的原理编辑
二、主从复制的作用
三、实验准备
四、实验过程
1、关闭master和slave上的防火墙和selinux
2、在master服务器上开启二进制日志
3、新建授权用户,用来让slave服务器去master服务器上获取二进制日志
4、在master服务器上刷新二进制日志,方便slave服务器记录和获取当前的位置号
5、在主从复制之前,保证master和slave上的数据是一致的
6、在slave服务器上配置master info
7、查看配置是否成功
8、启动slave
9、再次查看配置,并进行测试
master服务器上开启二进制日志,当执行数据库内的数据的内容或者结构发生变化时,产生新的二进制日志,而后master服务器上的dump线程提醒slave服务器上的IO线程根据master.info去接收连接到的master发送的二进制日志。slave服务器得到二进制日志后,写入到自己的relay-log,slave上的SQL线程根据relay-log新产生的内容去重演,并将此次操作最后的位置号记录到relay-log.info文件中。
1、主数据库出现问题,可以切换到从数据库。
2、可以进行数据库层面的读写分离。
3、可以在从数据库上进行日常备份。
准备两台全新的安装了MySQL的虚拟机
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX/s/enforcing/disabled/' /etc/selinux/config
在MySQL的配置文件中,开启二进制日志功能(根据每个人的安装习惯,文件的位置不同)
[root@mysql mysql]# vim /etc/my.cnf #这里是我自己使用的地址
在[mysqld]条目下添加
#binary_log
log_bin
server_id = 1
(在master服务器上)
root@san 16:23 mysql>grant replication slave on *.* to 'slave'@'192.168.56.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
root@san 16:47 mysql>flush logs;
Query OK, 0 rows affected (0.00 sec)
#在master服务器上导出数据
[root@mysql mysql]# mysqldump -uroot -p'123456' --all-databases > /backup/all_db.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
#然后利用scp命令将导出的数据传输到slave上,导入数据库中
[root@mysql mysql]# scp /backup/all_db.sql [email protected]:/backup/
[email protected]'s password:
all_db.sql 100% 857KB 87.1MB/s 00:00
[root@mysql2 mysql]# mysql -uroot -p'123456' < /backup/all_db.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
(至此,两台服务器上的基础数据就保持一致了)
root@san 16:57 mysql>CHANGE MASTER TO MASTER_HOST='192.168.56.128',
-> MASTER_USER='slave',
-> MASTER_PASSWORD='123456',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=154;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
其中的MASTER_USER='slave'和 MASTER_PASSWORD='123456'为在master上授权过的用户;
CHANGE MASTER TO MASTER_HOST='192.168.56.128'为指定的master的IP
root@san 16:57 mysql>show slave status\G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.56.128
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: mysql2-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: No
Slave_SQL_Running: No
root@san 16:59 mysql>stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
root@san 17:00 mysql>start slave;
Query OK, 0 rows affected (0.00 sec)
root@san 16:57 mysql>show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
测试在master上建库建表,是否slave上同步执行