介绍:
MySQL主从复制是指将一个MySQL数据库实例(主库)的数据通过二进制日志传输到另一个MySQL实例(从库)的过程,并且从库的数据会与主库保持同步。主从复制可以用于数据备份、读写分离以及分布式数据库等场景。
优点:
1.主数据库数据丢失,可以使用从数据库,降低数据丢失风险;
2.主节点出现故障,切换到从节点,确保服务不会中断;
3.如果并发量特别大,可以使用读写分离降低数据库压力,主数据库写数据,从数据库读数据;
原理:
1、Master开启binlog功能,然后更新事件(update、insert、delete)会按照顺序写入bin-log中。当Slave连接到Master的后,Master机器会为Slave开启binlog dump线程,该线程会去读取bin-log日志;
2、Slave连接到Master后,Slave库有一个I/O线程 通过请求binlog dump 线程读取bin-log日志,然后写入从库的relay log日志中;
3、Slave还有一个 SQL线程,实时监控 relay-log日志内容是否有更新,解析文件中的SQL语句,在Slave数据库中去执行。
配置:
前置操作:
准备主从数据库
配置主数据库
1.修改配置文件
#1.打开配置文件
[root@ztl etc]# vim /etc/my.cnf
#2.在[mysqld]后面添加配置
log-bin=master-log
server-id=1
2.登录主数据库给从数据库授权
MySQL5版本授权:
grant replication slave on *.* to root@'192.168.220.130' identified by '123456';
#授权用户root 密码123456 允许192.168.220.130从服务器连接
#刷新授权
mysql> flush privileges;
MySQL8版本授权
#操作mysql表
mysql> use mysql;
#创建用户用于从数据库连接使用,root用户名 允许192.168.220.130从服务器连接
mysql> CREATE USER 'root'@'192.168.220.130' IDENTIFIED WITH mysql_native_password BY '123456';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.220.130';
#刷新授权
mysql> flush privileges;
3.重启数据库
[root@ztl etc]# systemctl restart mysqld
4.查看主数据库的bin-log的文件名以及position
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-log.000002 | 157 | | | |
+-------------------+----------+--------------+------------------+-------------------+
注意,在配置完从服务器之前不要对主服务器数据修改
配置从数据库
1.修改配置文件
[root@ztl ~]# vim /etc/my.cnf
#在[mysql]下添加
log-bin=mysql-bin
server-id=2
2.重启MySQL服务
[root@ztl ~]# systemctl restart mysqld
3. 登录从服务器的mysql,连接主mysql
mysql> change master to master_host='192.168.220.128',master_user='root',master_password='123456',
master_log_file='master-log.000002',master_log_pos=157;
4.开启从数据库sql线程
mysql> start slave;
5.查看从数据库的状态
mysql> show slave status\G;
测试:
在主服务器创建数据库、添加表,从服务器也会实时更新