一、前言
前文己经介绍过了mysql的编译安装与工作流程,由于sun公司己被oracle收购,mysql己成附属品也间接被“收编”了,至于mysql以后是否还会开源,这个谁也不知道……。
二、简介
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。
MariaDB由MySQL的创始人麦克尔·维德纽斯主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自麦克尔·维德纽斯的女儿玛丽亚(英语:Maria)的名字。(维基百科如是说;看到这我突然想起一广告语:还是熟悉的配方,还是原来的味道!!!!)
三、安装流程
注:
之前博文中己经介绍过编译安装mysql,而mariadb的编译安装完全与mysql一样,如果非要说有什么不同的话,那就是名字(你懂的),将源码包解压后,通常我们都会给源文件一个软链接,为了方便以的管理,当编译安装mariadb时将指定的源文件链接成为如下:
|
1
|
#ln -s /usr/local/mariadb-Version mysql |
这样就可以了。其它的都一样。
四、多实例启动mariadb
那么什么是实例呢?官方的说法,实例指的就是操作系统中一系列的进程以及为这些进程所分配的内存块。如果用更容易理解的方式来解释,那就是说数据库的实例是我们访问数据库的通道。弄清楚什么是实例,那么我们来看一下在mariadb中如何启动多实例。
前提:
己经通过源码或通用二进制格式安装了mariadb.
1、初始化多个实例
⑴、建立实例目录
⑵、为数据实例目录初始化
利用mysql用户初始化两个实例
|
1
2
|
# scripts/mysql_install_db --datadir=/mariadb/data1 --user=mysql# scripts/mysql_install_db --datadir=/mariadb/data2 --user=mysql |
⑶、编辑源文件
|
1
|
#vim /etc/my.cnf |
在此文件末尾添加如下内容
|
1
2
3
4
5
6
7
8
9
|
#添加引导模块[mysqld_multi]mysqld = /usr/local/mysql/bin/mysqld_safe
#指定程序目录启动文件(mysqld_safe安全模式的启动方式)mysqladmin = /usr/local/mysql/bin/mysqladmin
#指定管理程序所在的目录user = mysqlpassword = mysql#指定是那一个用户(必须是系统是存在的用户) |
添加两个实例文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
[mysqld3307]port=3307#占用的端口(每一个实例一个端口)socket=/tmp/mysql3307.sock
#指定套接字文件所在的目录pid-file=/tmp/mysql3307.pid
#指定锁文件所在位置max_allowed_packet=1Mnet_buffer_length=2k#包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节table_open_cache=4#所有线程打开的表的个数sort_buffer_size=64k#排序buffer大小;线程级别thread_stack=128k#每个线程的堆栈大小basedir=/usr/local/mysql
#源文件所在的目录datadir=/mariadb/data1
#数据实例目录server-id=1
#指定为主服务器#########################[mysqld3308]port=3308socket=/tmp/mysql3308.sock
pid-file=/tmp/mysql3308.pid
max_allowed_packet=1Mnet_buffer_length=2ktable_open_cache=4sort_buffer_size=64kthread_stack=128kbasedir=/usr/local/mysql
datadir=/mariadb/data2
server-id=1
|
⑷、启动实例
|
1
2
3
4
5
6
|
#启动第一个实例# mysqld_multi --defaults-extra-file=/etc/my.cnf start 3307# mysqld_multi --defaults-extra-file=/etc/my.cnf reportReporting MySQL serversMySQL server from group: mysqld3307 is runningMySQL server from group: mysqld3308 is not running |
启动第二实例[mysqld3308]
可以使用
|
1
|
#ps -ef |grep msyql |
查看到服务是否启动
⑸、连接实例
第一种方式
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#连接第一个实例[mysql3307]# mysql -S /tmp/mysql3307.sock#使用socket文件连接MariaDB [(none)]> show session variables like "%sock%";
#显示所使用的socket文件+---------------+---------------------+| Variable_name | Value |+---------------+---------------------+| socket | /tmp/mysql3307.sock |
+---------------+---------------------+1 row in set (0.00 sec)
MariaDB [(none)]> show databases;#显示实例初始化后的数据库+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test |
+--------------------+4 rows in set (0.01 sec)
|
①对此实例进行授权管理
|
1
2
|
MariaDB [(none)]> grant shutdown on *.* to [email protected] identified by 'mysql' with grant option;
Query OK, 0 rows affected (0.03 sec)
|
这样做的目地只有一个,是允许那一个用户关闭此实例,如果不是此用户对此实例关闭,那么此实例会自动重启,也就是说无法正常关闭(当此实例工作过程中意外中断也会自动重启的),这也就解释了什么是安全模式下启动。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# mysql -S /tmp/mysql3308.sockMariaDB [(none)]> show session variables like "%sock%";
+---------------+---------------------+| Variable_name | Value |+---------------+---------------------+| socket | /tmp/mysql3308.sock |
+---------------+---------------------+1 row in set (0.00 sec)
MariaDB [(none)]> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test |
+--------------------+4 rows in set (0.01 sec)
|
同样也要对此实例进行授权管理
|
1
2
|
MariaDB [(none)]> grant shutdown on *.* to [email protected] identified by 'mysql' with grant option;
Query OK, 0 rows affected (0.03 sec) |
第二种方式
使用TCP/ip连接
|
1
|
#mysql -h localhost --protocol=tcp |
注:
当服务启动参数中有--skip-networking,则无法使用tcp协议连接
总结一下可以使用那些协议连接到mariadb
| 协议 | 连接类型 |
所支持的操作系统 |
| TCP/IP | Local,Remote | ALL |
| Unix socket file | Local Only | Unix Only |
| Named pipe | Local Only | Windows Only |
| Share Memory | Local Only | Windows Only |
⑹、关闭实例
|
1
|
#mysqld_multi --defaults-extra-file=/etc/my.cnf stop 3307 |
也可以使用
|
1
|
#mysqladmin shutdown |
这样做了之后mariadb数据库服务己经关闭,但是实例却没有关闭(有图有真像),实例无法连接……
从上图可以看到结果了,所以说使用mysqldmin只能治标不治本,还是授权用户管理更便捷
注:
如果想了解更多关于mysqld_multi的更多功能,请mysqld_multi --help
说到应用场景,我能想到的可能就是一主多从的环境(没有真实环境啊…………)
=================完==========================
PS:
1、实例脚本有时间再补上,有点小遗憾!