MariaDB 数据库
1. MariaDB 介绍
MariaDB数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
在MariaDB工作与在MySQL下工作几乎一模一样,她们有相同的命令、界面,以及在MySQL中的库与API,所以MariaDB可以说是为替换MySQL量身定做的,所以它们之间是相通用(兼容),换用后连数据库都不必转换!并可以获得MariaDB提供的许多更好的新特性。
与 MySQL 相比较, MariaDB 更强的地方在于:
Maria 存储引擎
PBXT 存储引擎
XtraDB 存储引擎
FederatedX 存储引擎
更快的复制查询处理
线程池
更少的警告和bug
运行速度更快
更多的 Extensions
更好的功能测试
慢查询日志的扩展统计
支持对 Unicode 的排序
2. MariaDB 安装
地址:http://downloads.mariadb.org/mariadb/repositories/
官方推荐使用yum方式安装
各系统版本的安装
我是安装的 10.3
选择合适的操作系统版本,生成yum仓库资源
在服务器上添加生成的yum仓库资源
vim /etc/yum.repos.d/mariadb.repo # MariaDB 10.3 CentOS repository list - created 2019-01-08 10:17 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
注 : 添加系统的yum 阿里云的镜像源 和 epel 源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum -y install epel-release
安装mariadb
yum install MariaDB-server MariaDB-client -y
安装后的文件情况
数据库文件在/var/lib/mysql
配置文件也在/etc/my.cnf 但是真正加在mariadb的配置文件是在/etc/my.cnf.d 下面这些配置文件
启动mariadb 服务
systemctl list-unit-files | grep mysql # 看看是否开机自启 service mysql start #开启mysql mysql -u root -p #第一次登陆不用输入密码但是进去必须修改密码 set password=password('123456')
3. MariaDB 常规操作
由于是mysql 的分支 , 一些操作指令跟mysql 完全一样
这里就不写了
3.1 MariaDB 存储引擎
直到10.1版本mariadb还在使用percona的xtradb作为默认的存储引擎。 10.2版本开始不再使用了,转而使用innodb作为默认存储引擎,原因是
使innodb或者xtradb和mysql(perocna)保持一致是一个非常复杂的任务
在innodb5.1到5.5, xtradb有很大的优势。但是现在MySQL已经将innodb的功能完善到和xtradb差不多了。升级innodb也不会延迟10.2-GA版本的发布。
MariaDB除了标准的MySQL支持的存储引擎之外,还有自己特有的存储引擎:
Aria(原名Maria) 存储引擎
Aria 存储引擎是默认被编译进MariaDB 5.1里的,并且在mysqld启动的时候就要求同时启动.
Aria是MariaDB的一个全新的存储引擎,它是作为MyISAM存储引擎的替代者而开发的。
它的特点:
-
拥有自动恢复功能
-
比MyISAM更好的缓存系统,相对于MyISAM有一定提升。
-
未来版本可能会支持事务。
另外,内部的磁盘表是Aria表格式而不是MyISAM表格式.这将使某些GROUP BY和DISTINCT请求速度更快,因为Aria有比MyISAM更好的缓冲机制
ColumnStore存储引擎是专门为数据仓库设计的存储引擎
TokuDB存储引擎是专门为提升写操作性能而设计的存储引擎,可以在open-source版本中获得,也可以通过安装插件的方式安装
3.2 MariaDB与MySQL的其他主要功能区别
MariaDB中的线程池技术可以允许20万个以上的数据库链接,并在多链接的情况下数据库性能依然不受影响 (以前版本mysql5.5版本及以前)。
针对二进制日志的组提交技术: 使得复制变得更快和更安全(MySQL5.6版本开始也支
持),组提交(group commit)是MYSQL处理日志的一种优化方式,主要为了解决写日志时频繁刷磁盘的问题。 binlog组提交的基本思想是,引入队列机制保证innodb commit 顺序与binlog落盘顺序一致,并将事务分组,组内的binlog刷盘动作交给一个事务进行,实现组提交目的
并行复制技术:通过slave-parallel-threads=N参数设置,可以使得从库的SQL线程在应用二进制日志的时候,可以多线程并行处理,从而加快复制的速度
Kill命令KILL QUERY可以停止当前执行的query,而不会把当前数据库链接给杀掉
支持delete … returning语句,返回的是当前被删除的数据
4. MariaDB备份恢复
MariaDB的备份恢复手段包括:
-
mysqldump
-
Percona XtraBackup
-
MariaDB Backup
-
物理文件拷贝:执行FLUSH TABLES WITH READ LOCK命令将数据库变成只读,然后拷贝数据文件
当前的MariaDB Backup方法是基于Percona XtraBackup 2.3.8开发的工具,所以与XtraBackup提供了类似的功能,用来对InnoDB,Aria和MyISAM存储引擎的表提供物理热备的方法
安装方法:
yum install -y MariaDB-backup
简单使用就是
创建测试数据进行备份
create database school; use school create table students (id int , sanme varchar(68),gender int,age int); insert into students values (1,'aa',1,12),(2,'bb',0,13),(3,'cc',1,12);
生成备份文件
mkdir -p /data/mysql/backup/ mariabackup --backup --target-dir=/data/mysql/backup/ -u root -p 123456 --host=127.0.0.1
恢复跟xtrabackup 一样
5. MariaDB 复制手段
MariaDB的复制手段:
-
支持标准的MySQL复制建立办法,包括基于binlog日志位置的复制和GTID模式的复制支持半同步复制,和MySQL的配置方法一样
-
支持半同步复制,和MySQL的配置方法一样
-
支持延迟复制,和MySQL的配置方法一样
-
基于MariaDB Galera Cluster的多主复制
MariaDB Galera Cluster提供了并行的复制机制,能实现同步的,多主的复制
方式。
因此具有很多实用特性:
-
可以在任意节点上进行读写
-
自动剔除故障节点
-
自动加入新节点
-
真正行级别的并发复制
-
客户端连接跟操作单数据库的体验一致。
在数据复制方面有同步和异步两种方式,而同步方式的优势十分明显:
-
高可用(当节点宕机时数据不会丢失,数据复制一致性高,实现不复杂);
-
具有较高的性能;
-
跨集群。但是缺点是随着节点数量的增加,其事务的响应时间,冲突的概率和死锁率会呈指数增长。(因此像MySQL和PostgreSQL都采用异步复制方式)
为克服同步复制的的缺点,现在主要的技术包括:
Group Communication,Write-sets,Database State Machine和Transaction Reordering。Galera Cluster使用一种称为Certification-based Replication的策略实现集群同步制,Certification-based Replication综合使用了Group Communication和Transaction Reordering技术。
具体来说:事务可以在任意单节点上执行或者复制,但是在事务在提交时,会运行一个协调认证程序来保证事务的全局一致性,它借助广播服务,建立一个全局的并发事务。
Certification-based Replication的主要思想是数据库中的任何事务在未到达提交点(commit point)时,会假设没有任何冲突。在事务commit发生之前,这个事务将会引起的所有数据库变化和所变行的主键都会被收集到一个write-set中。然后会把这个write-set发送到集群中的其它节点上。有了write-set,此时集群中所有的节点会使用主键执行一个certification test,如果失败则丢弃write-set并且回滚事务,如果成功则事务会被提交并将write-set应用到
集群中其余的节点。而Galera Cluster中使用Certification-based Replication策略则依赖于一个全局的事务序列。
6. MariaDB Galera Cluster(MGC)
MGC主要功能
-
同步复制
-
真正的multi-master,即所有节点可以同时读写数据库
-
自动的节点成员控制,失效节点自动被清除新节点加入数据自动复制
-
真正的并行复制,行级
-
用户可以直接连接集群,使用感受上与MySQL完全一致
优势:
-
因为是多主,所以不存在Slavelag(延迟)
-
不存在丢失事务的情况
-
同时具有读和写的扩展能力
-
更小的客户端延迟
-
节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的
从MariaDB10.1开始,Galera组件就已经包含在MariaDB-server包中,所以无需安装,可以配置之后直接使用
在每个服务器的/etc/hosts中增加主机名解析
修改主机名 ,并作主机名解析
主机10.0.0.130 hostnamectl set-hostname mariadb1 主机10.0.0.131 hostnamectl set-hostname mariadb2 主机10.0.0.132 hostnamectl set-hostname mariadb3 在mariadb每个机器上/etc/hosts/中增加主机名解析 10.0.0.130 mariadb1 10.0.0.131 mariadb2 10.0.0.132 mariadb3
环境如下
系统 | ip | host | mysql 版本 |
centos 7.2 | 10.0.0.130 | mariadb1 | mariadb10.3 |
centos 7.2 | 10.0.0.131 | mariadb2 | mariadb10.3 |
centos 7.2 | 10.0.0.132 | mariadb3 | mariadb10.3 |
在每个服务器节点的中增加配置:/etc/my.cnf.d/server.cnf
/etc/my.cnf 都加载 /etc/my.cnf.d/下的所有配置文件
[galera] # Mandatory settings wsrep_on=ON wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://mariadb1,mariadb2,mariadb3" default_storage_engine=InnoDB binlog_format=ROW innodb_autoinc_lock_mode=2
注意防火墙 ,或者开放端口
在第一个节点上启动Galera cluster服务:
#mariadb1 mysqld --wsrep-new-cluster --user=mysql &
其他节点 启动mariadb 服务:
/etc/init.d/mysql start
查看Galera集群的状态:
show status like ‘wsrep_%’;
查看Galera集群的状态一些重要参数:
wsrep_cluster_size:表示当前有多少个节点
wsrep_cluster_state_uuid:集群状态UUID,如果该值和当前的wsrep_local_state_uuid值相同,则说明数据是同步的
wsrep_last_committed:表示最近一次提交的事务ID
wsrep_local_commits:表示在本节点上提交的事务个数
测试Galera集群:
在第一个节点创建表和插入数据,在第二个节点能看到同步的数据
第二个节点看数据情况
在第二个节点上插入数据,则在第一个节点上也能看到同步的数据
关闭其中的一个节点,查看操作是否能正常:
在第一个节点上查看集群状态:
在第一个节点上执行插入操作:
insert into students values(5,'e',1,1); insert into students values(6,'f',1,1);
再把第二个节点开启,查看数据情况
数据会自动复制
新加的节点, 加入了集群也会自动复制数据
如果mgc 的集群全部宕机, 哪怎么恢复集群了
恢复规则如下:
看一下配置文件
cat /var/lib/mysql/grastate.dat
safe_to_bootstrap: 1 这个参数为1 表示最后一次更新的数据在这个节点 , 这个节点应该作为mgc 集群中第一次启动
-
mgc 第一次启动
mysqld --wsrep-new-cluster --user=mysql & -
其他节点
都跟启动服务一样正常启动
service mysql start
MGC 局限性:
(1).目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的.
(2).DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集.
(3).在多主环境下LOCK/UNLOCK TABLES不支持,以及锁函数GET_LOCK(), RELEASE_LOCK()…
(4).查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。
(5).允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。
(6).由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
(7).XA事务不支持,由于在提交上可能回滚。
(8).整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。
(9).集群节点建议最少3个。
(10).如果DDL语句有问题将破坏集群。
7. MariaDB高可用架构
由于MariaDB和MySQL具有很强的兼容性,所以目前主流的高可用架构都支持MariaDB,
包括:
• MHA
• MMM
• ATLAS
• MyCAT
其配置方法也和MySQL一样