1. MySQL 主从复制
MySQL 主从复制是MySQL最重要的功能之一,主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器即可充当主机,也可充当从机。MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。
-
复制就是将一台服务器上的数据转移到另一台服务器上的过程
-
主从复制属于单向流动由主到从
-
主从复制属于异步同步,是从服务器通过抓取主服务器的二进制日志文件,解析文件中的SQL语句,所进行的同步
-
主从复制可以在主服务器宕机时,从服务器可以提供与主服务器相同的内容
-
Master 为主
-
Slave 为从服务器
2. 主从复制过程
1) 主服务器将数据改变的内容的存放到二进制日志文件中
2) 从服务器通过io线程将二进制日志复制到中继日志中(relay-log)
3) 从服务器通过SQL线程执行中继日志中的事件,得到和主服务器一样的数据
3. 配置主从复制
- 安装mysql
1) 创建授权用户
- 用于Slave 在Master中拉取数据
- 用户 slave 密码 123.com
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'1.1.1.%' IDENTIFIED BY '123.com';
2) Master 数据库开启二进制日志文件
[root@localhost ~]# vim /etc/my.cnf
添加/修改:
server-id = 1 # 服务id号,不能重复;
log-bin=master-bin # 启动master主二进制日志文件
log-slave-updates=true # 允许从服务器复制更新
- 重新MySQL
systemctl restart mysqld
3) Slave 数据库服务器配置(开启中继日志)
- 中继日志用于拉取数据过来,进行存放
[root@localhost ~]# vim /etc/my.cnf
添加/修改:
server-id = 2
relay-log=relay-log-bin # 启动中继文件
relay-log-index=slave-relay-bin.index # 启用中继文件索引
- 重启MySQL服务
systemctl restart mysqld
4) 重新制定 Slave 的Master
-
数据库默认的Master是本身
- 需要重新指定
-
首先在Master 服务器查看Master状态信息
file 当前使用的二进制日志文件
Position 当前二进制日志文件的偏移量
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 120 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
- 在 Slave 中指定Master
mysql> change master to
master_user='slave1',
master_host='1.1.1.101' ,
master_password='123.com',
master_log_file='master-bin.000001',
master_log_pos=120;
参数:
change master to // 更改 Master
master_user='slave', // 指定登录用户
master_host='1.1.1.101' , // 指定Master地址
master_password='123.com', // 指定Password
master_log_file='master-bin.000001', // 当前所使用的二进制日志文件
master_log_pos=120; // 偏移量从哪里开始复制
5) 启动复制功能
mysql> start slave;
6) 查看Slave 状态
- 查看以下两个值是否为 yes
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
mysql> show slave status\G;
7) 测试验证
- 在Master 中创建数据库
mysql> create database cjk;
- Slave 查看
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cjk |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.08 sec)