MariaDB 数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。

开发这个分支的原因是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。

MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。

MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB(InnoDB的变体),分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX存储引擎。

MariaDB 官方网站: https://mariadb.org

MariaDB 官方安装: https://mariadb.com/kb/en/mariadb/yum/

MariaDB CentOS安装: https://downloads.mariadb.org/mariadb/repositories/   (推荐

 

1. 查找安装源

yum list | grep -i MariaDB

# rpm -qa | grep -i MariaDB
MariaDB-connect-engine-10.3.9-1.el7.centos.x86_64
MariaDB-devel-10.3.9-1.el7.centos.x86_64
MariaDB-compat-10.3.9-1.el7.centos.x86_64
MariaDB-tokudb-engine-10.3.9-1.el7.centos.x86_64
MariaDB-oqgraph-engine-10.3.9-1.el7.centos.x86_64
MariaDB-server-10.3.9-1.el7.centos.x86_64
MariaDB-rocksdb-engine-10.3.9-1.el7.centos.x86_64
MariaDB-gssapi-server-10.3.9-1.el7.centos.x86_64
MariaDB-backup-10.3.9-1.el7.centos.x86_64
MariaDB-common-10.3.9-1.el7.centos.x86_64
MariaDB-cracklib-password-check-10.3.9-1.el7.centos.x86_64
MariaDB-aws-key-management-10.3.9-1.el7.centos.x86_64
MariaDB-shared-10.3.9-1.el7.centos.x86_64
MariaDB-client-10.3.9-1.el7.centos.x86_64
MariaDB-cassandra-engine-10.3.9-1.el7.centos.x86_64
MariaDB-test-10.3.9-1.el7.centos.x86_64

 

2. 清空缓存

yum -y remove MariaDB-server MariaDB-client MariaDB-devel

yum clean all

yum makecache

 

3. 查看已安装

rpm -qa | grep MariaDB

 

使用 yum 安装的权限要求是 root 用户,如果不是则需要在shell命令之前加上 sudo,

或者 su root  切换到 super 管理员进行操作,并可能需要输入密码。

1. 添加 yum 数据源

CentOS7系统更换YUM Repo源

备份原镜像
  sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  sudo mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

阿里云的Base源和EPEL源
  sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

腾讯云的Base源和EPEL源
  sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
  sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo

163的Base源
  sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo

 

建议命名为 MariaDB.repo 类似的名字:

cd /etc/yum.repos.d/  
vim /etc/yum.repos.d/MariaDB.repo 

然后(CentOS 6.x),添加写入如下内容: 

# /etc/yum.repos.d/MariaDB.repo  
# MariaDB 5.5 CentOS repository list - created 2013-12-23 10:27 UTC  
# http://mariadb.org/mariadb/repositories/  
[mariadb]  
name = MariaDB  
baseurl = http://yum.mariadb.org/10.0/centos6-amd64  
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB  
gpgcheck=1  

或者(CentOS 7)

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

该文件的内容是参考官网,并从官网上生成的,设置安装源仓库的 具体的地址为:

https://downloads.mariadb.org/mariadb/repositories/

选择好操作系统版本(例如CentOS)之后既可以查看,其他操作系统的安装源也可以在此处查看并设置。

如果服务器不支持https协议,或者gpgkey 保错,确保没问题的话,可以将 gpgcheck=1 修改为 gpgcheck=0,则不进行校验.

yum源的生效:清理和生成缓存

sudo yum clean all

sudo yum makecache

 

2. 安装数据库

# yum remove MariaDB-server MariaDB-client  
yum -y install MariaDB-client MariaDB-server MariaDB-devel

如果要删除旧的数据库可以使用remove, 参数 -y 是确认,默认不用提示输入y。

 

3. 启动数据库

如果不用进行其他的操作,则现在就可以直接启动数据库,并进行测试了。

# 查看mysql状态;关闭数据库  
# service mysql status  
# service mysql stop  
# 启动数据库  
service mysql start  

MariaDB 安装后,默认启动命令为mysql,为了和MySQL保持一致,可以在 /etc/init.d/mysql 修改为 /etc/init.d/mysqld,修改命令如下:

cp /etc/init.d/mysql /etc/init.d/mysqld

 

4. 修改root密码

#  修改root密码
mysqladmin -u root password 'root'

因为安装好以后的root密码是空,所以需要设置

如果是测试服务器,那么你可以直接使用root,不重要的密码很多时候可以设置为和用户名一致,以免忘记了又想不起来。

如果是重要的服务器,请使用复杂密码,例如邮箱,各种自由组合的规则的字符等。

 

修改端口号

CentOS 7 MariaDB 的配置文件,默认路径为:/etc/my.cnf    /etc/my.cnf.d/

# ll /etc/my.cnf
-rw-r--r-- 1 root root 202 Aug 17 18:05 /etc/my.cnf
#
#
# ll /etc/my.cnf.d/
total 12
-rw-r--r-- 1 root root  763 Aug 17 18:05 enable_encryption.preset
-rw-r--r-- 1 root root  232 Aug 17 18:05 mysql-clients.cnf
-rw-r--r-- 1 root root 1164 Sep  6 16:49 server.cnf

修改文件 

vim /etc/my.cnf.d/server.cnf 

添加如下配置

# this is only for the mysqld standalone daemon

[mysqld]

port = 33806

max_allowed_packet=12800M

max_connections=2048

max_connect_errors=1000

重启 MySQL 服务,使其生效

/etc/init.d/mysql restart

 

5. 登录数据库

mysql -u root -p

如果是本机,那可以直接使用上面的命令登录,当然,需要输入密码. 如果是其他机器,那么可能需要如下的形式: 

mysql -h 127.0.0.1 -P 33806 -u root -p

 

6. 简单SQL测试

>
-- 查看MySQL的状态  
status;
-- 显示支持的引擎  
show engines;
-- 显示所有数据库  
show databases;
-- 切换数据库上下文,即设置当前会话的默认数据库  
use test;
-- 显示本数据库所有的表  
show tables;
-- 创建一个表  
CREATE TABLE t_test (  
  id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,  
  userId char(36),  
  lastLoginTime timestamp,  
  PRIMARY KEY (id)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

-- 插入测试数据  
insert into t_test(userId)  
    values  
('admin')  
,('haha')  
;

-- 简单查询  
select * from t_test;  
select id,userId from t_test  where userId='admin' ;  

 

7.  修改数据存放目录

mysql, MariaDB 的默认数据存放在 /var/lib/mysql/ 目录下。

如果不想放到此处,或者是想要程序和数据分离,或者是磁盘原因需要切换到其他路径,则可以通过修改 datadir系统变量来达成目的.

# 停止数据库
service mysql stop

# 创建目录,假设没有的话
mkdir /usr/local/ieternal/mysql_data

# 拷贝默认数据库到新的位置
# -a 命令是将文件属性一起拷贝,否则各种问题
cp -a /var/lib/mysql /usr/local/ieternal/mysql_data

# 备份原来的数据
cp -a /etc/my.cnf /etc/my.cnf_original

# 其实查看 /etc/my.cnf 文件可以发现
# MariaDB 的此文件之中只有一个包含语句
# 所以需要修改的配置文件为 /etc/my.cnf.d/server.cnf
cp /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf_original
vim /etc/my.cnf.d/server.cnf

然后 按 i 进入编辑模式,可以插入相关内容.使用键盘的上下左右键可以移动光标, 编辑完成以后,按 ESC 退出编辑模式(进入命令模式), 然后输入命令:wq 保存并退出

# 在文件的 mysqld 节下添加内容

[mysqld]
datadir=/usr/local/ieternal/mysql_data/mysql  
socket=/var/lib/mysql/mysql.sock
#default-character-set=utf8  
character_set_server=utf8
slow_query_log=on  
slow_query_log_file=/usr/local/ieternal/mysql_data/slow_query_log.log  
long_query_time=2

其中,也只有 datadir 和 socket 比较重要; 而 default-character-set 是 mysql 自己认识的,而 mariadb5.5 就不认识,相当于变成了 character_set_server

 

7.1 创建慢查询日志文件

既然上面指定了慢查询日志文件,我后来看了下MariaDB的err日志,发现MariaDB不会自己创建该文件,所以我们需要自己创建,并修改相应的文件权限(比如 mysql 采用 mysql用户,可能我们使用 root用户创建的文件,此时要求慢查询日志文件对mysql用户可读可写就行。

touch /usr/local/ieternal/mysql_data/slow_query_log.log
chmod 666 /usr/local/ieternal/mysql_data/slow_query_log.log

然后重新启动MySQL

service mysql start

 

配置主服务器 master

主从复制包含两个步骤: 1) 在 master 主服务器(组)上的设置; 2) 在 slave 从属服务器(组)上的设置.

  1. 如果没有启用,则需要 激活二进制日志.
  2. 给 master 设置唯一的  server_id ,所有的 slave 从属服务器也要设置  server_id; server_id值可以是整数型的数字(1 ~ 2^31-1), 在同一个复制组(replicating group)中的每台服务器的server_id都必须是唯一的.
  3. slave 从属服务器需要有连接并从master复制的权限. 通常是为每一台slave 创建一个单独的用户(user),并且只授予复制的权限(REPLICATION SLAVE 权限).

示例

GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_host' IDENTIFIED BY 'bigs3cret';   
FLUSH PRIVILEGES;  

需要注意,有一些系统配置选项可能会影响主从复制,查看下面的变量以避免发生问题:

skip-networking,如果 "skip-networking=1",则服务器将限制只能由localhost连接,阻止其他机器远程连到此服务器上。

bind_address,类似地,如果 服务器只监听 127.0.0.1(localhost)的TCP/IP连接,则远程的 slave也不能连接到此服务器

 

配置从属服务器 slave

给 slave 指定唯一的 server_id. 所有服务器,不管是主服务器,还是从服务器,都要设置 server_id. server_id值可以是整数型的数字(1 ~ 2^31-1), 在同一个复制组(replicating group)中的每台(/个)服务器的server_id都必须是唯一的.

要让此配置项生效,需要重新启动服务.

 

获取 master 的二进制日志坐标

当查看当前 二进制日志 的position(位置)时,需要阻止任何数据库的提交.可以通过此坐标点告诉slave服务器从哪一个特定的点开始复制。

  1. 在 master上执行命令 "FLUSH TABLES WITH READ LOCK",以强制写入日志,并锁定所有的表 —— 在此期间不能关闭会话,一关闭会话就会释放锁.
  2. 通过运行 "SHOW MASTER STATUS" 来获取二进制日志的当前位置信息.
  3. 记下 File 以及 Position 信息. 如果刚刚才开启了二进制日志功能,则为空.
  4. 然后,开始从master 拷贝 data 到 slave,请参考: Backup, Restore and Import
  5. 将数据从master拷贝到slave以后,可以执行"UNLOCK TABLES;"释放master上的锁。

示例如下:

--  
SHOW MASTER STATUS;
+--------------------+----------+--------------+------------------+  
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+  
| mariadb-bin.000096 |      568 |              |                  |
+--------------------+----------+--------------+------------------+  
--  

 

启动从属服务器 Slave

数据导入以后,就可以启动复制功能了。 通过执行 "CHANGE MASTER TO" 来开始.

确保 "MASTER_LOG_FILE",以及 "MASTER_LOG_POS" 与master早时候记下的信息一致.

示例如下:

CHANGE MASTER TO  
  MASTER_HOST='master.domain.com',  
  MASTER_USER='replication_user',  
  MASTER_PASSWORD='bigs3cret',  
  MASTER_PORT=33806,
  MASTER_LOG_FILE='mariadb-bin.000096',  
  MASTER_LOG_POS=568,
  MASTER_CONNECT_RETRY=10;

然后,启动slave

START SLAVE;

查看 slave状态:

SHOW SLAVE STATUS;

如果需要暂停 slave 复制,则可使用SQL :

stop slave; 

说明: 假如停止 MYSQL(MariaDB),然后重新启动,则 Slave会随mysqld 自动启动.所以不需要担心日常的重启等操作.

[root@AY13 mysql]# service mysql stop
Shutting down MySQL. SUCCESS! 
[root@AY13 mysql]# service mysql start
Starting MySQL.. SUCCESS!

更多问题,欢迎加入QQ群 《脚本娃娃-桃花岛》进行讨论,口令: Ext

 

MariaDB激活二进制日志

要启用二进制日志功能,可以使用 "--log-bin[=name]"选项来启动服务器.

如果文件名中包含了后缀(例如 "--log-bin[=master-bin.log]"),则后缀(".log")将会被忽略.

如果没有指定文件名,默认使用 datadir/log-basename-bindatadir/mysql-bin 或者 datadir/mariadb-bin(如果也没有 --log-basename 选项,根据server版本的不同,会使用后两个中的一个); 

datadir 是存放数据(data)的目录,由系统变量 datadir 定义.(启动参数 --datadir=path 或者 -h path);

强烈建议: 使用  --log-basename  或者指定二进制日志的文件名,以便服务器的hostname改变以后也不影响复制(replication );

存储二进制日志的目录,用于存放 各个独立的二进制日志文件,以及对这些文件的二进制日志索引(文件).

二进制日志文件的扩展名是一序列的数字.每增加一个日志文件,扩展名的数字就会增加;所以较老的日志的扩展名数字较小,最近的日志的扩展名数字最大。

每次服务器启动,就会启用一个新的二进制日志,当然扩展名也是新的;启动或停止时日志会被强制写入物理文件(平时可能存储在内存缓存中,由操作系统决定何时写入).也可以通过定义 max_binlog_size 变量来指定一个数字,当日志累增到此值就会强制写入硬盘.

二进制日志索引文件按顺序储存着所有的二进制日志文件的索引.

datadir下的文件列表示例如下:

shell> ls -l 
total 100
...
-rw-rw---- 1 mysql adm 2098 Apr 19 00:46 mariadb-bin.000079
-rw-rw---- 1 mysql adm  332 Apr 19 00:56 mariadb-bin.000080
-rw-rw---- 1 mysql adm  347 Apr 19 07:36 mariadb-bin.000081
-rw-rw---- 1 mysql adm  306 Apr 20 07:15 mariadb-bin.000082
-rw-rw---- 1 mysql adm  332 Apr 20 07:41 mariadb-bin.000083
-rw-rw---- 1 mysql adm  373 Apr 21 07:56 mariadb-bin.000084
-rw-rw---- 1 mysql adm  347 Apr 21 09:09 mariadb-bin.000085
-rw-rw---- 1 mysql adm  398 Apr 21 21:24 mariadb-bin.000086
-rw-rw---- 1 mysql adm  816 Apr 21 17:05 mariadb-bin.index

二进制日志index文件的名字部分默认与其他的二进制日志文件相同,而扩展名使用".index",当然,index文件的名字也可以通过" --log-bin-index[=filename] " 选项来单独指定.

具有 SUPER 权限的客户端,可以通过设置 sql_log_bin 变量,来为此次会话禁用或者再次启用二进制日志;

(sql_log_bin 是一个session变量,默认值是1,只有具有 SUPER 权限的客户端可以设置;设置为 0 则此客户端的的操作将不记入二进制日志;)

示例如下:

MariaDB [test]> SET sql_log_bin = 0;
MariaDB [test]> SET sql_log_bin = 1;

 

二进制日志的格式

二进制日志有三种格式:

默认是 基于语句的日志(statement-based);

row-based是基于行的日志;

mix是可以混合前面两种日志的格式;

详情请参考: Binary Log Formats

MariaDB服务器所有的配置选项参见: mysqld Options (full list)

MariaDB服务器系统变量参见: Server System Variables

 

 

参考推荐:

Centos 使用YUM安装MariaDB

CentOS 7.2 / 6.5 系统安装指引

LNMP(CentOS+Nginx+Mysql+PHP)服务器环境配置

Linux 配置 nginx、mysql、php-fpm、redis 开机启动

MySQL 查看数据库大小、表大小和最后修改时间

MySQL 查询语句取整数或小数

MySQL 正则表达式查询