主从数据库概念及实战

来自CloudWiki
跳转至: 导航搜索

主从数据库概念

主从数据库把数据库架构分为主数据库和从数据库。从数据库是主数据库的备份,这是提高信息安全的手段。主从数据库服务器不在一个地理位置上,当发生意外时数据库可以保存。

以MySQL为例,MySQL主从复制是指数据可以从一个MySQL 数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库、特定的数据库或者特定的表。

主从数据库.png

MySQL主从复制涉及到3个线程,一个运行在主节点(log dump thread),其余两个(I/O thread、SQL thread)运行在从节点。

从库生成两个线程,一个IO线程,一个SQL线程。I/O线程去请求主库的binlog,并将得到的binlog日志写到relay log(中继日志)文件中。主库会生成一个log dump线程,用来给从库IO线程传binlog。SQL线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,最终达到数据一致。

主从数据库的优点

①方便做数据的热备份

作为后备数据库,主数据库服务器故障后,可切换到从数据库服务器继续工作,避免数据丢失。

②架构的扩展更容易

业务量越来越大,I/O 访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O 访问的频率,提高单个机器的I/O性能。

③读写分离

使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表SQL语句非常的慢,导致锁表,影响前台服务。如果前台使用主库,报表使用从库,那么报表SQL将不会造成前台锁,保证了前台速度。

常见的主从形式

1.一从一主

一主一从是最常见的主从架构,实施起来简单并且有效,不仅可以实现HA,而且还能读写分离,进而提升集群的并发能力。 HA(High Available),是双机集群系统简称,指高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。

2.一主多从

提高系统的读性能。

3.多主一从

多主一从可以将多个MySOL数据库备份到一台存储性能比较好的服务器上。

4.双主复制

双主复制,也就是互做主从复制,每个Master既是Master,又是另外一台服务器的slave。这样任何一方所做的变更,都会通过复制应用到另外一方的数据库中。

5.级联复制

级联复制模式下,部分slave的数据同步不连接主节点,而是连接从节点。因为如果主节点有太多的从节点,就会损耗一部分性能用于replication,那么可以让3~5个从节点连接主节点,其它从节点作为二级或者三级与从节点连接,这样不仅可以缓解主节点的压力,并且对数据一致性没有负面影响。


(主从数据库部署)

首先,新建虚拟机,我们默认是使用CentOS-7-x86_64-DVD-1511的镜像 镜像地址: 链接:https://pan.baidu.com/s/1Myl_GXnUg7t3OR01mCuMrQ 提取码:1511

①安装两台虚拟机,配置ip,yum源

②修改主机名(主从数据库同理)

这里我们设置主数据库为mysql0,从数据库为mysql1

> [root@localhost /]# hostnamectl set-hostname mysql0 (修改主机名)

> [root@localhost /]# bash (刷新shell命令行)

> [root@mysql0 /]# su - (重新登录)

> [root@mysql0 ~]# hostnamectl (查看主机信息)

(主从)查看主机信息.png

③关闭防火墙和SELinux服务

> [root@mysql0 ~]# setenforce 0 (设置关闭 1开启0关闭)

> [root@mysql0 ~]# systemctl disable firewalld (永久关闭防火墙)

> [root@mysql0 ~]# getenforce (查看进程 Enforcing开启Permissive关闭)

> Permissive

开机关闭SELinux编辑/etc/selinux/config文件将SELINUX的值设置为disabled下次开机SELinux就不会启动了。

④配置/etc/hosts文件(主从数据库同理) (hosts文件是Linux系统上一个负责ip地址与域名快速解析的文件,以ascii格式保存在/etc/目录下。hosts文件包含了ip地址与主机名之间的映射,还包括主机的别名。在没有域名解析服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的ip地址,否则就需要使用dns服务程序来解决。通过可以将常用的域名和ip地址映射加入到hosts文件中,实现快速方便的访问。)

文件最后加上主从数据库ip和主机名

(主从)修改配置文件.png

⑤安装数据库和数据库服务(主从数据库同理)

> [root@mysql0 /]# yum install -y mariadb mariadb-server(安装数据库以及服务)

> [root@mysql0 /]# systemctl start mariadb (启动数据库)

> [root@mysql0 /]# systemctl enable mariadb (设置开机自启)

> Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

⑥初始化数据库(主从数据库同理)

> [root@mysql1 ~]# mysql_secure_installation (格式化数据库)

步骤参考以下↓

格式化数据库.png

⑦修改数据库配置文件(主从数据库同理)

> [root@mysql0 /]# cat /etc/my.cnf (修改这个文件 添加以下这三项)

log_bin=mysql-bin (记录操作日志)

binlog_ignore_db=mysql (不同步mysql系统数据库)

server_id=111 (数据库集群中每个节点ID都要不同)

(主从)修改数据库配置.png

⑧主数据配置

在数据库进行如下两条命令 grant all privileges on *.* to root@’%'identified by “SICT”;

grant replication slave on . to ‘xiaobai’@‘mysql1’ identified by “SICT”;

(SICT为数据库密码,xiaobai为主数据库节点上新建的用户)

> [root@mysql0 /]# systemctl restart mariadb (重启数据库)

> [root@mysql0 /]# mysql -uroot -p (输入密码)

> MariaDB [(none)]> grant all privileges on *.* to root@'%'identified by "SICT";

> Query OK, 0 rows affected (0.00 sec)

> MariaDB [(none)]> grant replication slave on *.* to 'xiaobai'@'mysql1' identified by "SICT";

> Query OK, 0 rows affected (0.00 sec)

⑨从数据库配置

在数据库进行如下命令

MariaDB [(none)]> change master to

   -> master_host='mysql0',master_user='xiaobai',master_password='SICT';

Query OK, 0 rows affected (0.36 sec)

MariaDB [(none)]> start slave;

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show slave status\G

以下两项均为yes则表示主从数据库部署成功,在主数据库进行的修改,会自动同步到从数据库。

(主从)查看从数据库配置.png