MySql最容易实现的高可用框架就是主从架构,主从架构最简单,就是一个写入、一个复制。简单的描述如下图:

这个图的主从架构有一个缺点,就是主数据库的负载太重,容易因为连接数达到上限出现错误,导致服务下线的问题。这是最简单的主从架构,可以实现MySQL服务的数据库备份。
架构的实现
这种的主从架构的实现需要两台MySQL数据库服务器,我的两个数据库的ip地址是192.168.1.21和1292.168.1.22两个。
安装MySQL
mysql的安装请参考我的另外一片博文(centos7安装mysql服务)
配置高可用
1.我们配置高可用之前,看一下我们的数据库。
192.168.1.21的数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
192.168.1.22的数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.03 sec)
2.我们看出,两个服务器的数据库是一致的,这个时候,我们在两个数据库服务器建立一个空的test数据库。
create database test;
3.在运维的时候,需要锁定mysql的写入
use database test;
FLUSH TABLES WITH READ LOCK;
4.配置主服务器的my.cnf文件
log-bin = mysql-bin##启用二进制日志记录
server-id = 1##服务器id,从1开始往后排
binlog-do-db=test##同步的数据库
binlog-ignore-db=mysql##系统数据库,不同步的数据库
binlog-ignore-db=information_schema##系统数据库,不同步的数据库
binlog-ignore-db=performance_schema##系统数据库,不同步的数据库
binlog-ignore-db=sys##系统数据库,不同步的数据库
5.配置从数据库的my.cnf文件
log-bin = mysql-bin
server-id = 2
replicate-do-db=test
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60
6.在主数据库上将数据库所建立的文件夹scp过去
scp -r /var/mysql/test 192.168.1.22:/var/mysql/
7.解锁数据库
UNLOCK TABLES;
8.重启mysqld服务
service mysqld restart
9.查看主节点状态。
show master status\G
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 154
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql,information_schema,performance_schema,sys
Executed_Gtid_Set:
1 row in set (0.00 sec)
10设置从节点的同步。
change master to
master_host='192.168.1.21',
master_user='root',##用户不一定非得root,可以专门创建一个用于同步的用户
master_password='root',
master_log_file='mysql-bin.000003',
master_log_pos=154;
11.查看从节点状态
show slave status \G
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.21
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 154
Relay_Log_File: bogon-relay-bin.000008
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB: mysql,information_schema,performance_schema,sys
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 740
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: c921096d-bcf2-11e7-8091-000c29a18ca9
Master_Info_File: /var/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
当出现IO的yes和sql的yes的时候就说明配置正确,可以工作了
这个架构的缺点是主数据库负担太重,如何减轻主数据库的负担,如下图

讲数据库的读放到从服务器上,实现主服务器的读写分离。需要在代码当中进行区分。
文章评论