使用MqSql主从复制技术实现数据库热备
MySQL replication?
- replication可以实现将数据从一台数据库服务器(master)复制到一台或者多台数据库服务器(slave)
- 默认情况下属于异步复制,无需维持长连接
- 通过配置,可以复制所有的库或者几个库,甚至库中的一些表
- 是MySQL内建的,本身自带的
原理:master将数据库的改变写入二进制日志,slave同步并执行
部署MySQL主从同步<M-S>
环境:
IP | 系统/mysql版本 | 角色 |
192.168.240.63 | centos7.5/5.7 | master |
192.168.240.64 | centos7.5/5.7 | slaver |
1.安装mysql5.7:
tar xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
yum -y install ./mysql*.rpm
systemctl start mysqld //启动mysql
在mysql的配置文件/etc/my.cnf关闭密码强度审计插件,并重启mysql:
[root@localhost ~]# vim /etc/my.cnf
在这个配置文件中最后添加:
validate-password=OFF //不使用密码强度审计插件
systemctl restart mysqld //重启服务
[root@localhost ~]# grep 'password' /var/log/mysqld.log //获取临时密码
[root@localhost ~]# mysql -u root -p'6j?1e9&.p%E6' //使用临时密码登陆
mysql> set password for root@localhost = password('123456') //修改密码
mysql> flush privileges; //立即生效
mysql> quit;
复制master安装文件到slave:
[root@localhost ~]# scp mysql-5.7/mysql*.rpm root@192.168.240.64:/root/mysql-5.7
root@192.168.240.64's password:
mysql-community-client-5.7.27-1.el7.x86_64.rpm 100% 24MB 92.5MB/s 00:00
mysql-community-common-5.7.27-1.el7.x86_64.rpm 100% 275KB 26.2MB/s 00:00
mysql-community-devel-5.7.27-1.el7.x86_64.rpm 100% 3744KB 60.2MB/s 00:00
mysql-community-embedded-5.7.27-1.el7.x86_64.rpm 100% 45MB 83.0MB/s 00:00
mysql-community-embedded-compat-5.7.27-1.el7.x86_64. 100% 23MB 107.1MB/s 00:00
mysql-community-embedded-devel-5.7.27-1.el7.x86_64.r 100% 124MB 75.5MB/s 00:01
mysql-community-libs-5.7.27-1.el7.x86_64.rpm 100% 2219KB 64.9MB/s 00:00
mysql-community-libs-compat-5.7.27-1.el7.x86_64.rpm 100% 2067KB 35.1MB/s 00:00
mysql-community-server-5.7.27-1.el7.x86_64.rpm 100% 165MB 59.1MB/s 00:02
mysql-community-test-5.7.27-1.el7.x86_64.rpm 100% 117MB 82.5MB/s 00:01
2.创建要同步的数据库:
[root@localhost ~]# mysql -u root -p //登陆数据库
mysql> create database HA; //创建HA库做测试
mysql> use HA; 进入HA库
mysql> create table T1(id int,name varchar(20)); 在HA下创建T1表
mysql> quit;
[root@localhost ~]# systemctl stop mysqld
3.配置my.cnf 添加以下内容
log-bin=mysql-bin-master //启动二进制日志
server-id=1 //本机数据库ID显示
binlog-do-db=HA //可以被从服务器复制的库,需要同步的数据库名
binlog-ignore-db=mysql //不可以被从服务器复制的库
[root@localhost ~]# systemctl restart mysqld //重启mysql
4.授权
mysql> grant replication slave on *.* to slave@192.168.240.64 identified by "123456";
mysql> flush privileges; //立即生效
5.查看状态信息:
查看二进制日志:
复制前要保证同步的数据库一致:
[root@localhost ~]# scp HA.sql 192.168.240.64:/root/mysql-5.7
6.配置slave服务器:
安装MySQL:yum -y install ./mysql*.rpm
在mysql的配置文件/etc/my.cnf关闭密码强度审计插件,并重启mysql:
[root@localhost ~]# vim /etc/my.cnf
在这个配置文件中最后添加:
validate-password=OFF //不使用密码强度审计插件
systemctl restart mysqld //重启服务
[root@localhost ~]# grep 'password' /var/log/mysqld.log //获取临时密码
[root@localhost ~]# mysql -u root -p'6j?1e9&.p%E6' //使用临时密码登陆
mysql> set password for root@localhost = password('123456') //修改密码
mysql> flush privileges; //立即生效
mysql> quit;
7.两台数据库服务器版本要一致:
[root@localhost ~]# mysql -uroot -p //登陆mysql
mysql> show variables like '%version%'; //查看版本信息
+-------------------------+------------------------------+
| Variable_name | Value |
+-------------------------+------------------------------+
| innodb_version | 5.7.27 |
| protocol_version | 10 |
| slave_type_conversions | |
| tls_version | TLSv1,TLSv1.1 |
| version | 5.7.27 |
| version_comment | MySQL Community Server (GPL) |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+------------------------------+
8.测试连接到master是否成功
[root@localhost ~]# mysql -uslave -p -h 192.168.240.63 远程登陆master端
ps:如果无法连接奇怪关闭master防火墙:systemctl stop firewall
9.在slave端创建要同步的测试HA数据,导入master的数据库文件
mysql> create database HA; //在slave上创建HA数据库
mysql> quit; /退出
[root@localhost mysql-5.7]# mysql -uroot -p HA<HA.sql //导入SQL文件到slave
10.修改slave服务器配置文件
[root@localhost mysql-5.7]# systemctl stop mysqld //停止mysql
[root@localhost mysql-5.7]# vim /etc/my.cnf //编辑配置文件
在最后添加一行:server-id=2 //这个是slaver的ID号,不能和master相同,如果还有slaver可以继续叠加,如server-id=3
[root@localhost mysql-5.7]# systemctl start mysqld //启动mysql
[root@localhost mysql-5.7]# mysql -uroot -p //登陆mysql
mysql> stop slave; //停止slave
mysql> change master to master_host='192.168.240.63',master_user='slave',master_password='123456'; //改变slave连接信息
mysql> start slave; /启动slave
mysql> show slave status\G //查看状态,执行结果如图所示:
如果上述两个均开启则成功
11.插入数据测试同步
在master端插入数据:
mysql> insert into T1 values (1,'man');
Query OK, 1 row affected (0.00 sec)
在slaver上查看:
mysql> select * from T1;
+------+------+
| id | name |
+------+------+
| 1 | man |
+------+------+
1 row in set (0.00 sec)