本文在CentOS 7上使用通用二进制格式安装mariadb(mysql)。
mysql有三种方式安装:rpm包、源码、通用二进制格式安装。
通用二进制格式,是指已经编译过的,下载后简单配置即可直接使用的程序包。类似于windows下的绿色免安装程序。
1、为避免干扰,先把之前在该系统用yum安装的mariadb卸载。
从 https://downloads.mariadb.org 下载,本文下载的是5.5.58版本。
2、必须解压至/usr/local下。虽然是mariadb,但还必须是名为mysql的目录。这里为其创建链接目录mysql:
[root@Node5 my_download]% tar xf mariadb-5.5.58-linux-x86_64.tar.gz -C /usr/local/
[root@Node5 my_download]% cd /usr/local
[root@Node5 local]% ln -sv mariadb-5.5.58-linux-x86_64 mysql
‘mysql’ -> ‘mariadb-5.5.58-linux-x86_64’
3、为安全起见,运行mysql服务的必须是系统用户mysql和系统组mysql。为此创建它们。不过由于笔者的虚拟机上已经创建了,应该是之前用yum装过mariadb-server导致:
[root@Node5 local]% id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)
4、可以看到解压后,mysql目录下的各文件属主、属组不一,把它们同一修改成属主为root,属组为mysql:
[root@Node5 local]% cd mysql/
[root@Node5 mysql]% ll
total 168
drwxr-xr-x 2 root root 4096 Nov 23 09:48 bin
-rw-r--r-- 1 500 500 17987 Oct 17 07:48 COPYING
drwxr-xr-x 3 root root 18 Nov 23 09:48 data
-rw-r--r-- 1 500 500 8245 Oct 17 07:48 EXCEPTIONS-CLIENT
drwxr-xr-x 3 root root 19 Nov 23 09:48 include
-rw-r--r-- 1 500 500 8694 Oct 17 07:48 INSTALL-BINARY
drwxr-xr-x 3 root root 334 Nov 23 09:48 lib
drwxr-xr-x 4 root root 30 Nov 23 09:48 man
drwxr-xr-x 11 root root 4096 Nov 23 09:48 mysql-test
-rw-r--r-- 1 500 500 108813 Oct 17 07:48 README
drwxr-xr-x 2 root root 30 Nov 23 09:48 scripts
drwxr-xr-x 27 root root 4096 Nov 23 09:48 share
drwxr-xr-x 4 root root 4096 Nov 23 09:48 sql-bench
drwxr-xr-x 3 root root 239 Nov 23 09:48 support-files
[root@Node5 mysql]% chown root:mysql ./*
5、为mysql创建一个工作目录,最好是作为一个单独文件系统的挂载点,因为使用时间长了其内容可能会很大。在该工作目录下创建一个目录用于存放数据内容(还可创建其他目录用于存储日志信息等)。
这里为方便起见就不使用单独挂载点了。直接使用/mydata作为工作目录,其下的data作为数据存放目录:
[root@Node5 mysql]% mkdir -pv /mydata/data
mkdir: created directory ‘/mydata’
mkdir: created directory ‘/mydata/data’
注意,data目录作为数据存储目录,要确保mysql用户对其有写权限,所以更改其属主、数组为mysql:
[root@Node5 mysql]% ll -d /mydata/data
drwxr-xr-x 2 root root 6 Nov 23 10:04 /mydata/data
[root@Node5 mysql]% chown mysql.mysql /mydata/data
mysql配置文件读取次序为(最后读取的最终生效):
1、/etc/my.cnf
2、/etc/mysql/my.cnf
3、启动mysql时使用选项”–default-extra-file=PATH”,表示读取这个选项指定的文件路径的配置文件
4、~/.my.cnf,用户家目录下的这个隐藏配置文件是最后读取
就本次安装来说,程序目录下提供了很多样例配置文件:
[root@Node5 mysql]% ls support-files/
binary-configure my-innodb-heavy-4G.cnf my-small.cnf mysql.server
magic my-large.cnf mysqld_multi.server SELinux/
my-huge.cnf my-medium.cnf mysql-log-rotate
之所以很多,因为它们是针对不同内存大小的配置文件,比如my-small.cnf针对的内存是128M的等等。
这里使用my.large.cnf作为配置文件(它是针对256M内存的)。按mysql读取的配置文件,只要把它复制为/etc/my.cnf1或/etc/mysql/my.cnf即可(复制为家目录下的也可以,无所谓)。
[root@Node5 mysql]% mkdir /etc/mysql
[root@Node5 mysql]% cp support-files/my-large.cnf /etc/mysql/my.cnf
在配置文件的mysqld段下,加入3行:
datadir = /mydata/data # 用于指定数据存储在哪个目录
skip_name_resolve = ON # 用于跳过名称解析。否则数据库授权时会有点麻烦,有得授权指定IP又得授权对应主机,因为mysql会把主机名和它对应的IP看作是两台不同的主机
innodb_file_per_table = ON
程序目录下提供了服务脚本mysql.server,直接把它复制到/etc/rc.d/init.d下,命名为mysqld即可:
[root@Node5 mysql]% cp support-files/mysql.server /etc/rc.d/init.d/mysqld
因为CentOS 7兼容service作为服务脚步,所以这里直接复制服务脚本也可使用。
此时使用服务脚本启动,会报错,因为mysql的元数据库mysql(名字就叫mysql)没有建立:
[root@Node5 mysql]% service mysqld start
Starting MySQL.171123 10:25:13 mysqld_safe Logging to '/mydata/data/Node5.err'.
171123 10:25:13 mysqld_safe Starting mysqld daemon with databases from /mydata/data
.. ERROR!
可以看到/mydata/data目录下,创建了一些文件但还没有mysql目录(一个目录就对应的一个数据库,此时启动仅会创建一些文件,因为没有元数据库mysql):
[root@Node5 mysql]% ls /mydata/data/
aria_log.00000001 aria_log_control ibdata1 ib_logfile0 ib_logfile1 mysql-bin.000001 mysql-bin.index Node5.err
需要运行初始化脚本,在程序包目录下的scrpts/mysql_install_db。
注意,运行这个脚本必须在程序包目录下,使用相对路径(绝对路径、其他相对路径均错误)执行。
可使用”-h”查看它的各选项,不过此处仅需指明由mysql用户运行、数据目录为何即可:
[root@Node5 mysql]% ./scripts/mysql_install_db --user=mysql --datadir=/mydata/data
Installing MariaDB/MySQL system tables in '/mydata/data' ...
……
此时可以看到数据目录下有mysql目录(对应mysql元数据库)了:
[root@Node5 mysql]% ls /mydata/data
aria_log.00000001 ibdata1 ib_logfile1 mysql-bin.000001 mysql-bin.000003 Node5.err test
aria_log_control ib_logfile0 mysql mysql-bin.000002 mysql-bin.index performance_schema
启动成功:
[root@Node5 mysql]% service mysqld start
Starting MySQL.171123 10:36:43 mysqld_safe Logging to '/mydata/data/Node5.err'.
171123 10:36:43 mysqld_safe Starting mysqld daemon with databases from /mydata/data
. SUCCESS!
[root@Node5 mysql]% ss -tanl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 50 *:3306 *:*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
(完)