mariadb 下载与安装编译

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

http://fanqie.blog.51cto.com/9382669/1708239

一、下载mariadb

就是简单给大家提个醒吧,像我一样粗心的朋友可能会这样。

前几天下载mariadb的时候发现不能下载,网站可以打开但是不能下载。

这是因为默认所转到的下载站是东软,但是这个站里没有对应的下载路径。在下载页面只要换一个下载站就可以了。

如mariadb5.5的下载页面的右下角:https://downloads.mariadb.org/mariadb/5.5.46/

wKioL1YzVauQPee6AACtUnlRzbA957.jpg

安装介绍:

环境:

系统:CentOS6.5_x64

软件:cmake,mariadb5.5

mariadb_10+要使用gcc5++.  可以看这里  http://cuchadanfan.blog.51cto.com/9940284/1689556


安装方式:
1、Vendor: 操作系统自带的rpm包 
2、MySQL官方rpm包
3、通用二进制格式
4、源码编译

我们这里选择的是源码编译安装。

二、安装cmake

下载地址:https://cmake.org/files/v3.4/cmake-3.4.0-rc2.tar.gz

1
2
3
4
5
[root@nfs cmake- 3.4 . 0 -rc2]# ls
Auxiliary                   CMakeGraphVizOptions.cmake  CompileFlags.cmake  CTestConfig.cmake     Help        Source
bootstrap                   CMakeLists.txt              configure           CTestCustom.cmake. in   Licenses    Templates
CMakeCPack.cmake            CMakeLogo.gif               CONTRIBUTING.rst    DartConfig.cmake      Modules     Tests
CMakeCPackOptions.cmake. in   cmake_uninstall.cmake. in     Copyright.txt       doxygen.config        README.rst  Utilities

可以通过configure来自定义安装,也可以执行目录下的bootstrap脚本来自动安装。

必备环境:gcc、gcc-c++

在用configure或bootstrap配置完以后会提示运行gmake,在linux上面gmake就是make,是一个符号链接。

1
2
3
[root@nfs cmake- 3.4 . 0 -rc2]# ./bootstrap 
[root@nfs cmake- 3.4 . 0 -rc2]# make
[root@nfs cmake- 3.4 . 0 -rc2]# make install


三、安装mariadb

下载地址:http://mirrors.opencas.cn/mariadb//mariadb-5.5.46/source/mariadb-5.5.46.tar.gz

1、创建用以运行mysql服务的用户

1
2
3
4
[root@nfs ~]# groupadd -r -g  3306  mysql
[root@nfs ~]# useradd -r -s /sbin/nologin -g mysql -u  3306  mysql
[root@nfs ~]# id mysql
uid= 3306 (mysql) gid= 3306 (mysql) groups= 3306 (mysql)

这里无所谓,直接创建用户也一样。

2、创建数据库目录。最好在单独的磁盘上,不要与系统在一起。我这里做实验就无所谓了。

1
2
3
[root@nfs ~]# mkdir -pv /mydata/data
mkdir: created directory `/mydata'
mkdir: created directory `/mydata/data'

3、cmake配置选项

不同之处:

./configure cmake . 检查配置选项,生成编译配置文件
./configure --help cmake . -LH or ccmake . 查看配置选项

make clean
rm CMakeCache.txt 清理此前的编译状态

先来看看配置选项,而且cmake也会检测当前所必须的一些工具或库。

1
2
3
4
5
6
7
8
[root@nfs mariadb- 5.5 . 46 ]# cmake . -LH
.
.
-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH) 
CMake Error at cmake/readline.cmake: 85  (MESSAGE):
   Curses library not found.  Please install appropriate  package ,
  
       remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu,  package  name  is  libncurses5-dev, on Redhat and derivates it  is  ncurses-devel.

报错缺少curses库文件,而且也提示安装ncurses-devel了。报错信息在所输出的配置选项上方。

安装完ncurses-devel以后,要删除CMakeCache.txt文件。

1
2
3
4
5
[root@nfs mariadb- 5.5 . 46 ]# yum install ncurses-devel -y
[root@nfs mariadb- 5.5 . 46 ]# rm CMakeCache.txt -f
[root@nfs mariadb- 5.5 . 46 ]# cmake . -LH
.
Warning: Bison executable not found  in  PATH

这个bison影响不大,大家可以装上,这里就不贴了。

1
2
3
[root@nfs mariadb- 5.5 . 46 ]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mydata/data -DWITH_ARCHIVE_STORAGE_ENGINE=on -DWITH_BLACKHOLE_STORAGE_ENGINE=on -DWITH_READLINE=on -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_XTRADB_STORAGE_ENGINE=on  
[root@nfs mariadb- 5.5 . 46 ]# make
[root@nfs mariadb- 5.5 . 46 ]# make install


选项前面为什么加上-D,好像是表示默认属性,这点不清楚。

-DCMAKE_INSTALL_PREFIX  表示安装位置,我们一般习惯性的还是用mysql名称的目录,而且也避免有的应用使用的是这个目录。

-DMYSQL_DATADIR 表示数据存储目录

-DWITH_ARCHIVE_STORAGE_ENGINE 存储引擎archive,默认是不启用的。因为非常高的批量插入速度和实时压缩功能,和相对较差的查询功能,所以经常被用来当做仓库使用。

-DWITH_BLACKHOLE_STORAGE_ENGINE 黑洞引擎,写入的任何数据都会消失。

-DWITH_READLINE=on 附带readline行编辑库

-DWITH_SSL=system 使用系统的ssl库,要安装openssl-devel包。

-DWITH_ZLIB=system 使用系统的zlib库。

-DWITH_XTRADB_STORAGE_ENGINE 存储引擎xtradb,可以说是innodb的升级版。这个默认就是安装的。

这个配置所必须的openssl-devel要装上,zlib-devel一般默认是安装的。


cmake报错:

-- Could NOT find Boost

安装boost-devel


-- Looking for event.h - not found

安装libevent-devel。

有时候所报的软件名称不全可以用yum和grep来找到,如:“yum list all | grep event”


开始漫长的等待,编译完成并安装以后就跟下载的通用二进制包一样了。

4、初始化

在mariadb的安装目录中。

1
2
3
[root@nfs mysql]# ls
bin      COPYING.LESSER  EXCEPTIONS-CLIENT  INSTALL-BINARY  man         README   share      support-files
COPYING  data             include             lib             mysql-test  scripts  sql-bench
1
2
3
4
[root@nfs mysql]# chown -R mysql:mysql .            #安装目录属主属组为mysql
[root@nfs mysql]# scripts/mysql_install_db --datadir=/mydata/data --user=mysql   #初始化数据库
[root@nfs mysql]# chown -R root .                    #安装目录属主为root
[root@nfs mysql]# chown -R mysql:mysql /mydata/data        #数据库目录属主组为mysql
1
2
[root@nfs mysql]# ls /mydata/data
aria_log. 00000001   aria_log_control  mysql  performance_schema  test

看来已经生成系统数据库了。

1
2
3
4
5
6
7
8
9
10
11
12
[root@nfs mysql]# cp support-files/my-large.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y
[root@nfs mysql]# cp support-files/mysql.server  /etc/init.d/mysqld
[root@nfs mysql]# chmod +x /etc/init.d/mysqld
[root@nfs mysql]# chkconfig --add mysqld
[root@nfs mysql]# chkconfig --list mysqld
mysqld              0 :off     1 :off     2 :on     3 :on     4 :on     5 :on     6 :off
  
[root@nfs mysql]# vim /etc/my.cnf
thread_concurrency =  4     #cpu的二倍, 在 5.6 版本中去掉了。
datadir = /mydata/data    #添加这一行,数据库位置。
innodb_file_per_table = on  #独立的innodb表空间文件。

配置文件如下

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
36
37
38
39
40
41
42
43
44
45
46
47
# For advice on how to change settings please see
# http: //dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# ***  default  location during install, and will be replaced  if  you
# *** upgrade to a newer version of MySQL.
[client]
port =  3306
socket=/ var /lib/mysql/mysql.sock
default -character- set  = utf8
 
[mysqld]
 
# Remove leading # and  set  to the amount of RAM  for  the most important data
# cache  in  MySQL. Start at  70 % of total RAM  for  dedicated server,  else  10 %.
# innodb_buffer_pool_size = 128M
 
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
 
# These are commonly  set , remove the # and  set  as  required.
basedir = /usr/local/mysql
datadir = /mydata/data
port =  3306
socket = / var /lib/mysql/mysql.sock
user = mysql
innodb_file_per_table = on
 
#Disabling symbolic-links  is  recommended to prevent assorted security risks
symbolic-links =  0
default -time-zone = system
default -storage-engine = InnoDB
 
[mysqld_safe]
log-error = / var /log/mysql/mysqld.log
pid-file = / var /run/msyqld/mysqld.pid
# server_id = .....
# socket = .....
 
# Remove leading # to  set  options mainly useful  for  reporting servers.
# The server defaults are faster  for  transactions and fast SELECTs.
# Adjust sizes  as  needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 
 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES




番外

配置文件中的:

[mysqld]是作用于服务端。
[mysql]只是作用于mysql组件的客户端。
[client]是作用于所有客户端组件。


尝试启动:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@nfs mysql]# service mysqld start
Starting MySQL...                                          [  OK  ]
[root@nfs mysql]# ss -tnlp
LISTEN      0       50      *: 3306         *:*      users:(( "mysqld" , 50837 , 15 ))
  
[root@nfs mysql]# ll /mydata/data
total  28720
-rw-rw----.  1  mysql mysql     16384  Oct  30  11 : 51  aria_log. 00000001
-rw-rw----.  1  mysql mysql        52  Oct  30  11 : 51  aria_log_control
-rw-rw----.  1  mysql mysql  18874368  Oct  30  12 : 08  ibdata1
-rw-rw----.  1  mysql mysql   5242880  Oct  30  12 : 08  ib_logfile0
-rw-rw----.  1  mysql mysql   5242880  Oct  30  12 : 08  ib_logfile1
drwx------.  2  mysql mysql      4096  Oct  30  11 : 51  mysql
-rw-rw----.  1  mysql mysql       245  Oct  30  12 : 08  mysql-bin. 000001
-rw-rw----.  1  mysql mysql        19  Oct  30  12 : 08  mysql-bin.index
-rw-r-----.  1  mysql mysql      1904  Oct  30  12 : 08  nfs.star.com.err
-rw-rw----.  1  mysql mysql         6  Oct  30  12 : 08  nfs.star.com.pid
drwx------.  2  mysql mysql      4096  Oct  30  11 : 51  performance_schema
drwx------.  2  mysql mysql      4096  Oct  30  11 : 51  test
[root@nfs mysql]#


启动正常,我们先把服务停止,再做下后续操作。

1
2
[root@nfs mysql]# service mysqld stop
Shutting down MySQL.                                       [  OK  ]


5、后续操作

执行程序的目录添加进path,lib目录添加到ld程序,man文档,include头文件。

1
2
3
4
5
6
7
8
[root@nfs mysql]# vim /etc/profile.d/mysql.sh   
export PATH=/usr/local/mysql/bin:$PATH
[root@nfs mysql]# . /etc/profile.d/mysql.sh
[root@nfs mysql]# ln -s /usr/local/mysql/ include /mysql/ /usr/ include /mysql
[root@nfs mysql]# vim /etc/man.config 
MANPATH /usr/local/mysql/man
[root@nfs mysql]# vim /etc/ld.so.conf.d/mysql- 5.5 .conf
/usr/local/mysql/lib


查看其它信息:

1
2
3
4
5
6
7
8
9
10
[root@nfs mysql]# mysqld --verbose --help | less
mysqld  Ver  5.5 . 46 -MariaDB-log  for  Linux on x86_64 (Source distribution)
Copyright (c)  2000 2015 , Oracle, MariaDB Corporation Ab and others.
  
Starts the MariaDB database server.
  
Usage: mysqld [OPTIONS]
  
Default options are read from the following files  in  the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

配置文件的读取顺序。相同配置后面的覆盖前面的。所有配置文件会合并到一起生效。

并显示出配置文件中可用的服务器变量。 定义的和没有定义的所有变量。还有启动时可用的选项。


把安装目录重命名再符号链接成安装路径的目录,这样以后升级版本,直接作符号链接就可以了。

1
2
3
4
5
6
7
8
[root@nfs mysql]# cd ..
[root@nfs local]# ls
bin  doc  etc  games   include   lib  lib64  libexec  mysql  sbin  share  src
[root@nfs local]# mv mysql mysql5. 5.46
[root@nfs local]# ln -s mysql5. 5.46  mysql
[root@nfs local]# ll
lrwxrwxrwx.   1  root root     11  Oct  30  12 : 40  mysql -> mysql5. 5.46
drwxr-xr-x.  12  root mysql  4096  Oct  30  12 : 23  mysql5. 5.46


四、数据库必要操作

删除匿名用户, 给root创建密码

1
2
[root@nfs local]# service mysqld start
Starting MySQL..                                           [  OK  ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@nfs local]# mysql
Welcome to the MariaDB monitor.  Commands end  with  ; or \g.
Your MariaDB connection id  is  2
Server version:  5.5 . 46 -MariaDB-log Source distribution
  
Copyright (c)  2000 2015 , Oracle, MariaDB Corporation Ab and others.
  
Type  'help;'  or  '\h'  for  help. Type  '\c'  to clear the current input statement.
  
MariaDB [(none)]> SELECT user,host,password FROM mysql.user;
+------+--------------+----------+
| user | host         | password |
+------+--------------+----------+
| root | localhost    |          |
| root | nfs.star.com |          |
| root |  127.0 . 0.1     |          |
| root | :: 1           |          |
|      | localhost    |          |
|      | nfs.star.com |          |
+------+--------------+----------+
6  rows  in  set  ( 0.00  sec)


删除匿名用户或不用的:

1
2
3
4
5
6
7
8
MariaDB [(none)]> DROP USER  '' @ 'localhost' ;
Query OK,  0  rows affected ( 0.00  sec)
  
MariaDB [(none)]> DROP USER  '' @ 'nfs.star.com' ;
Query OK,  0  rows affected ( 0.00  sec)
  
MariaDB [(none)]> DROP USER  'root' @ '::1' ;
Query OK,  0  rows affected ( 0.00  sec)


root用户设置密码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MariaDB [(none)]> UPDATE mysql.user SET password=PASSWORD( 'abcd1234' ) WHERE user= 'root' ;
Query OK,  3  rows affected ( 0.03  sec)
Rows matched:  3   Changed:  3   Warnings:  0
  
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK,  0  rows affected ( 0.00  sec)
  
MariaDB [(none)]> SELECT user,host,password FROM mysql.user;
+------+--------------+-------------------------------------------+
| user | host         | password                                  |
+------+--------------+-------------------------------------------+
| root | localhost    | *4AD47E08DAE2BD4F0977EED5D23DC901359DF617 |
| root | nfs.star.com | *4AD47E08DAE2BD4F0977EED5D23DC901359DF617 |
| root |  127.0 . 0.1     | *4AD47E08DAE2BD4F0977EED5D23DC901359DF617 |
+------+--------------+-------------------------------------------+
3  rows  in  set  ( 0.00  sec)
  
MariaDB [(none)]>
1
2
3
4
5
6
7