实验环境

系统:centos7.4

安装包:mariadb-10.2.15.tar.gz源码包

一、先准备Mariadb10.2.15二进制安装包,我们可以到https://downloads.mariadb.org/mariadb/10.2.15/下载,这里我们选择mariadb-10.2.15.tar.gz这个包

官方会提示,请不要在生产环境使用beta和alpha版本的数据库。

他们的主要功能一般是用来测试和排错,所以不稳定。

这里我们选择安装一个10.2系列的Stable的数据库。

mariadb 驱动下载 mariadb10.2_centos


二、安装相关包,把编译环境配置好

[root@centos7 ~]# yum install libaio-devel \
bison \
bison-devel \
zlib-devel \
openssl-devel \
ncurses-devel \
libcurl-devel \
libarchive-devel \
boost-devel \
gcc \
gcc-c++ \
cmake \
libevent-devel

三、准备用户和数据目录

[root@centos7 ~]# useradd -r -s /bin/nologin -m -d /data/mysqldb/ mysql
[root@centos7 ~]# getent passwd mysql
mysql:x:991:986::/data/mysqldb:/bin/nologin
[root@centos7 ~]# ll /data/
总用量 0
drwx------ 3 mysql mysql 78 7月   6 00:55 mysqldb
[root@centos7 ~]# mkdir -pv /app/mysql   //创建数据库的安装目录
mkdir: 已创建目录 "/app"
mkdir: 已创建目录 "/app/mysql"

四、解压缩、编译源码包

[root@centos7 ~]# tar xvf mariadb-10.2.15.tar.gz

编译mariadb我们使用的是cmake 编译安装方式。编译选项可以查看:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html

[root@centos7 ~]# cd mariadb-10.2.15
[root@centos7 mariadb-10.2.15]# ls
appveyor.yml  cmake            COPYING             debian             include             libmariadb   mysql-test  plugin     sql         strings        VERSION  zlib
BUILD         CMakeLists.txt   COPYING.thirdparty  Docs               INSTALL-SOURCE      libmysqld    mysys       randgen    sql-bench   support-files  vio
BUILD-CMAKE   config.h.cmake   CREDITS             EXCEPTIONS-CLIENT  INSTALL-WIN-SOURCE  libservices  mysys_ssl   README.md  sql-common  tests          win
client        configure.cmake  dbug                extra              KNOWN_BUGS.txt      man          pcre        scripts    storage     unittest       wsrep
[root@centos7 mariadb-10.2.15]# cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysqldb/ \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

编译时出现的错误信息,说明编译mariadb时,tokuDB引擎需要支持c++11的编译器,如果确实想用tokuDB引擎,那就编译一个高版本的gcc。如果不需要tokuDB引擎,直接在编译参数中加上-DPLUGIN_TOKUDB=NO就行了

mariadb 驱动下载 mariadb10.2_mysql_02


这里说明一下:-DCMAKE_INSTALL_PREFIX是指定安装的位置,这里是/app/mysql,-DMYSQL_DATADIR是指定MySQL的数据目录,这里是/data1/mysql,安装目录和数据目录都可以自定义设置,-DSYSCONFDIR是指定配置文件所在的目录,一般都是/etc ,具体的配置文件是/etc/my.cnf,-DWITHOUT_TOKUDB=1(no)这个参数一般都要设置上,表示不安装tokudb引擎,tokudb是MySQL中一款开源的存储引擎,可以管理大量数据并且有一些新的特性,这些是Innodb所不具备的,这里之所以不安装,是因为一般计算机默认是没有Percona Server的,并且加载tokudb还要依赖jemalloc内存优化,一般开发中也是不用tokudb的,所以暂时屏蔽掉,否则在系统中找不到依赖会出现:CMake Error at storage/tokudb/PerconaFT/cmake_modules/TokuSetupCompiler.cmake:179 (message)这样的错误,然后后面那些参数都是可选的,可以加也可以不加。

注意:如果万一执行中有了错误,可以执行: rm -f CMakeCache.txt 删除编译缓存,让指令重新执行,否则每次读取这个文件,命令修改正确也是报错。

由于刚才编译出错,这里我们先执行 rm -f CMakeCache.txt 删除编译缓存,然后再重新编译。
[root@centos7 mariadb-10.2.15]# cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysqldb/ \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
-DPLUGIN_TOKUDB=NO

编译完成后/mariadb-10.2.15目录下会多出一些文件

[root@centos7 mariadb-10.2.15]# ls
appveyor.yml    CMakeFiles           COPYING.thirdparty       debian                    info_macros.cmake     libmysqld        mysys      scripts     support-files  win
BUILD           cmake_install.cmake  CPackConfig.cmake        Docs                      install_manifest.txt  libservices      mysys_ssl  sql         tests          wsrep
BUILD-CMAKE     CMakeLists.txt       CPackSourceConfig.cmake  EXCEPTIONS-CLIENT         INSTALL-SOURCE        make_dist.cmake  pcre       sql-bench   unittest       zlib
client          config.h.cmake       CREDITS                  extra                     INSTALL-WIN-SOURCE    Makefile         plugin     sql-common  VERSION
cmake           configure.cmake      CTestTestfile.cmake      import_executables.cmake  KNOWN_BUGS.txt        man              randgen    storage     VERSION.dep
CMakeCache.txt  COPYING              dbug                     include                   libmariadb            mysql-test       README.md  strings     vio

五、安装数据库
cmake没问题,可以安装了 make && make install 时间有点长,耐心等待。

[root@centos7 mariadb-10.2.15]# make && make install

执行完成也就是安装完成了,我们来查看/app/mysql目录下的文件安装情况,发现这个文件的所有者和属主为root所拥有。因此需要对这个目录设置acl权限,使mysql用户对该目录用rwx权限,否则无法启动服务。

[root@centos7 mysql]# ll /app/mysql
总用量 176
d-wx--x--x  2 root root  4096 7月  11 19:57 bin
--w-------  1 root root 17987 5月  17 2018 COPYING
--w-------  1 root root 86263 5月  17 2018 COPYING.thirdparty
--w-------  1 root root  2268 5月  17 2018 CREDITS
d-wx--x--x  3 root root    18 7月  11 19:56 data
--w-------  1 root root  8245 5月  17 2018 EXCEPTIONS-CLIENT
d-wx--x--x  3 root root    19 7月  11 19:56 include
--w-------  1 root root  8694 5月  17 2018 INSTALL-BINARY
d-wx--x--x  3 root root   218 7月  11 19:56 lib
d-wx--x--x  4 root root    30 7月  11 19:57 man
d-wx-wx--x 11 root root  4096 7月  11 19:57 mysql-test
--w-------  1 root root  2374 5月  17 2018 README.md
--w-------  1 root root 19510 5月  17 2018 README-wsrep
d-wx--x--x  2 root root    30 7月  11 19:57 scripts
d-wx--x--x 29 root root  4096 7月  11 19:57 share
d-wx--x--x  4 root root  4096 7月  11 19:57 sql-bench
d-wx--x--x  3 root root   275 7月  11 19:57 support-files
[root@centos7 mysql]# setfacl -R -m u:mysql:rwx /app/mysql   //对这个目录设置acl权限,使mysql用户对该目录用rwx权限

六、生成数据库文件,一定要进入/app/mysql这个目录下,然后在这个目录下执行scripts子目录下的mysql_install_db这个脚本文件。

[root@centos7 mariadb-10.2.15]# cd /app/mysql
[root@centos7 mysql]# ls
bin      COPYING.thirdparty  data               include         lib  mysql-test  README-wsrep  share      support-files
COPYING  CREDITS             EXCEPTIONS-CLIENT  INSTALL-BINARY  man  README.md   scripts       sql-bench
[root@centos7 mysql]# ./scripts/mysql_install_db --datadir=/data/mysqldb/ --user=mysql --basedir=/app/mysql
Installing MariaDB/MySQL system tables in '/data/mysqldb/' ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/app/mysql/bin/mysqladmin' -u root password 'new-password'
'/app/mysql/bin/mysqladmin' -u root -h centos7.cwj.com password 'new-password'

Alternatively you can run:
'/app/mysql/bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '/app/mysql' ; /app/mysql/bin/mysqld_safe --datadir='/data/mysqldb/'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/app/mysql/mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

七、准备配置文件

[root@centos7 mysql]# cp /app/mysql/support-files/my-huge.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y

八、准备环境变量

[root@centos7 mysql]# echo 'PATH=/app/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@centos7 mysql]# . /etc/profile.d/mysql.sh   //重载脚本文件

九、准备启动脚本并启动

[root@centos7 mysql]# cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@centos7 mysql]# service mysqld start
Reloading systemd:                                         [  确定  ]
Starting mysqld (via systemctl):                           [  确定  ]