MySQL数据库 主从服务器复制

为什么要做主从复制

通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低。
为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主数据库的负载。
而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失。
在这里插入图片描述

主从复制的类型

基于语句的复制(默认)
在主服务器上执行的语句,从服务器执行同样的语句
基于行的复制
把改变的内容复制到从服务器
混合类型的复制
一旦发现基于语句无法精确复制时,就会采用基于行的复制

主从复制过程示意图

在这里插入图片描述

来吧!展示!!

三台虚拟机
主服务器:20.0.0.4
从服务器01:20.0.0.5
从服务器02:20.0.0.6
MySQL安装之前有写,可以翻阅一下
链接在这

三台服务器关闭防火墙

setenforce 0
iptables -F

配置主服务器

配置主配置文件
[root@master mysql]# vim /etc/my.cnf
[mysqld]
…省略部分…
server-id = 1
log_slave_updates = true
log-bin = master-bin
[root@master mysql]# systemctl restart mysqld

[root@master mysql]# mysql -u root -p
Enter password: 
# *.* 指的是 全部数据库.所有表,slaveuser 是从服务器登录用的账户
mysql> grant replication slave on *.* to 'slaveuser'@'20.0.0.%' identified by
'123123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

#刷新
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

#查看从服务器读取位置,我这边读取的是 601
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      601 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

配置从服务器

两台都要进行设置,我这边只演示一台

[root@slave01 ~]# vim /etc/my.cnf
[mysqld]
…省略部分…
server-id = 12   ##三台服务器得各不一样,我另一台配的13
relay-log=relay-log-bin   ##二进制日志文件名
relay-log-index=slave-relay-bin.index
[root@slave01 ~]# systemctl restart mysqld

[root@slave01 ~]# mysql -u root -p
Enter password: 

##master_host指向主服务器IP,master_user只想刚刚创建的用户,master_log_pos指向刚刚得位置,我的是306
mysql> change master to master_host='20.0.0.4',master_user='slaveuser',master_password='123123',master_log_file='master-bin.000001',master_log_pos=601;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

#启动从同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

#查看 slave 状态
mysql> show slave status\G;
             Master_Host: 20.0.0.4
             Master_User: slaveuser
             Slave_IO_Running: Yes   ##有下面两条差不多就ok了
             Slave_SQL_Running: Yes

测试主从复制

在主服务器上创建一个数据库和表,验证是否同步

mysql> create database happy;
Query OK, 1 row affected (0.00 sec)

mysql> use happy;
Database changed

mysql> create table kaixin(id int(2) primary key auto_increment,xinqing varchar(10) not null);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into kaixin values(1,'高兴');
Query OK, 1 row affected (0.01 sec)

mysql> select * from kaixin;
+----+---------+
| id | xinqing |
+----+---------+
|  1 | 高兴    |
+----+---------+
1 row in set (0.00 sec)

从数据库验证

mysql> use happy;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from kaixin;
+----+---------+
| id | xinqing |
+----+---------+
|  1 | 高兴    |
+----+---------+
1 row in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/Ora_G/article/details/108245885
今日推荐