MySQL主从复制
什么是主从复制:
通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行
复制的这一过程叫做主从复制。
为什么需要主从复制:
通过主从复制可以实现后续的读写分离,部署高可用架构等打下基础。
配置文件修改-主:
[root@rhel7 ~]# vim /etc/my.cnf
[mysqld]
log_bin=mysql-bin
server_id=138
#server_id 必须配置且全网唯一。
#若只开启二进制日志不配置server_id,服务将无法重启。
时间同步:
[root@rhel7 ~]# ntpdate ntp1.aliyun.com
[root@node2 ~]# ntpdate ntp1.aliyun.com
重启服务-主:
[root@rhel7 ~]# systemctl restart mysqld
创建同步用户:
mysql> grant replication slave on *.* to 'bak'@'192.168.110.%' identified by 'Redhat@123';
#权限如下
mysql> show grants for 'bak'@'192.168.110.%';
+---------------------------------------------------------+
| Grants for bak@192.168.110.% |
+---------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'bak'@'192.168.110.%' |
+---------------------------------------------------------+
查看主上的二进制文件名及位置:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
配置-从:
[mysqld]
server_id=140
mysql> change master to
-> master_host='192.168.110.138',
-> master_user='bak',
-> master_password='Redhat@123',
-> master_log_file='mysql-bin.000002',
-> master_log_pos=154;
测试:
mysql> start slave;
mysql> show slave status\G;
#若以下两个为yes则代表成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#主
mysql> create database test;
#从
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
注:
在进行同步前,最好使两边数据库内容保持一致、版本号尽量一致、操作系统一致,不然可能出现连接不上的情况。