Write the Code. Change the World.

6月 23

前因

由于mysql被收购,闭源等原因。很多公司和用户选择了使用mariadb。关于mysqlmariadb 的比较,可以参考下边的文章。
http://www.oschina.net/news/80081/mariadb-is-not-only-mysql-replacement

依赖包的安装以及清除旧版本

yum groupinstall -y Development Tools
yum -y install gcc gcc-c++ make cmake  readline-devel zlib-devel ncurses ncurses-devel 
yum -y install libevent man  libxml2 libxml2-devel openssl-devel bison bison-devel  libaio-devel

rpm -qa|grep mysql 
rpm -qa|grep mariadb
rpm -e --nodeps  mariadb-libs-5.5.50-1.el7_2.x86_64

安装好依赖包后,清除掉旧版本的mysqlmariadb

官网以及下载

mariadb的官网下载地址:https://downloads.mariadb.org/
目前,最新稳定版是MariaDB 10.1.22。一如既往,将文件包下载到/usr/local/src/mariadb/ 下。

cd /usr/local/src/mariadb
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.1.22/source/mariadb-10.1.22.tar.gz
tar -xzvf mariadb-10.1.22.tar.gz
cd mariadb-10.1.22

解压,进入文件目录。

创建用户组以及相关目录

groupadd mysql  #创建mysql用户组
useradd -s /sbin/nologin -g mysql -M mysql   #创建mysql用户归属mysql组
mkdir /data/server/mariadb/mysql   #创建安装目录
mkdir -p /data/server/mariadb/data   #创建数据库存放目录
chown -R mysql:mysql  /data/server/mariadb/data   #给予权限

编译源码包,安装

  cmake . -DCMAKE_INSTALL_PREFIX=/data/server/mariadb/mysql -DMYSQL_DATADIR=/data/server/mariadb/data -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=1 

部分编译参数解释:

  • -DCMAKE_INSTALL_PREFIX 安装目录
  • -DMYSQL_DATADIR 数据库存放目录
  • -DSYSCONFDIR 配置文件目录(具体 /etc/my.cnf)
  • -DWITH_INNOBASE_STORAGE_ENGINE 支持数据库innobase引擎
  • -DWITH_ARCHIVE_STORAGE_ENGINE 支持数据库archive引擎
  • -DWITH_BLACKHOLE_STORAGE_ENGINE 支持数据库blackhole存储引擎
  • -DDEFAULT_CHARSET 支持字符集
  • -DDEFAULT_COLLATION 排序规则 校验字符
  • -DENABLED_LOCAL_INFILE 允许本地导入数据

注意在源码包里进行cmake。如果遇到错误 rm -f CMakeCache.txt 并删除缓存重新配置。配置完成结果。

Configuring done
Generating done
Build files have been written to: /usr/local/src/mariadb/mariadb-10.1.22

可能存在下边的错误:

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

于是修改下:

cmake . -DCMAKE_INSTALL_PREFIX=/alidata/service/mariadb/mysql -DMYSQL_DATADIR=/alidata/service/mariadb/data -DWITHOUT_TOKUDB=1 -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=1

下边进行编译和安装。

make && make install

编译安装是一个漫长的过程。为了加快编译速度,如果你才cpu是多核的,可以加参数使用多核进行编译。如:make j4表示用四核来进行编译。如果你的服务器就是四核的,这样使用也许会cpu资源不足。这个时候应减少使用核数或直接使用make命令。make完成才进行make install进行安装。

在安装的过程中,也许会报错。如果出现下边这样的错误,是内存不足引起的。

cc: internal compiler error: Killed (program cc1)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
make[2]: *** [storage/mroonga/vendor/groonga/lib/CMakeFiles/libgroonga.dir/expr.c.o] Error 4
make[1]: *** [storage/mroonga/vendor/groonga/lib/CMakeFiles/libgroonga.dir/all] Error 2
make: *** [all] Error 2

既然内存不足,最直接的方法是添加内存。当然添加swap交换分区也可以。这个也是最方便与直接的。

dd if=/dev/zero of=/home/swap bs=1024 count=1024000   #创建一个1G的分区文件(大小可以自己定)
/sbin/mkswap /home/swap   #将创建的分区格式化为swap
/sbin/swapon /home/swap   #使这个分区立即生效
vi /etc/fstab   #编辑fstab,设置开机自动挂载swap
/home/swap swap swap defaults 0 0   #将此行追加到 /etc/fstab 行尾。然后保存。
free #查看swap大小 

交换分区已经准备好了,可以从新配置与安装了。因为出现错误,需要删除CMakeCache.txt,才能再次cmake,而不是使用make clean命令。也可以删除文件包,从新解压再配置安装。

rm -f /usr/local/src/mariadb/mariadb-10.1.22/CMakeCache.txt

继续上边的步骤,直到安装成功。

中国有句成语叫兔死狗烹,鸟尽弓藏mariadb既然已经安装好了,就可以删除交换分区了。

/sbin/swapoff /home/swap   #停止swap分区
rm -f /home/swap   #删除swap分区文件
vi /etc/fstab   #编辑fstab,取消开机自动挂载swap
/home/swap swap swap defaults 0 0   #将此行注释掉或删掉。然后保存。
free #查看swap大小 

设置

cd  /data/server/mariadb/mysql   #进入安装目录
scripts/mysql_install_db --user=mysql --datadir=/data/server/mariadb/data/   #初始化系统表
cp support-files/mysql.server /etc/init.d/mysqld   #复制mysql.server
chkconfig --add mysqld   #添加到系统服务
chkconfig mysqld on   #设置开机自启动   
vi /etc/profile   #编辑环境变量
PATH=$PATH:/data/server/mariadb/mysql/bin   #此行和下一行追加到 /etc/profile文件末尾,并保存退出。
export PATH
source /etc/profile   #使得环境变量生效。

安装完成后在安装目录下的support-files目录下有my-small.cnf、my-medium.cnf、my-large.cnf以及my-huge.cnf,这是示例的配置文件,可以把他们替换到etc下的my.cnf再做适当修改。

cp -f /usr/local/src/mariadb/mariadb-10.1.22/support-files/my-small.cnf /etc/my.cnf
vi  /etc/my.cnf   #编辑配置文件

mariadb 10.3 没有 my-small.cnf 文件。请复制:

cp /alidata/service/mariadb/mysql/support-files/wsrep.cnf /etc/my.cnf

在配置文件中添加下边的代码。

basedir=/data/server/mariadb/mysql
datadir=/data/server/mariadb/data
pid-file=/data/server/mariadb/data/mariadb.pid
log-error=/data/log/mariadb/mariadb.err 

保存,然后启动mysql。

/etc/init.d/mysqld start   #启动mysql。

重启 (restart)
停止(stop)
启动(start)

执行安全初始化脚本

上边所有步骤都结束后,最好做一次安全初始化。使用mysql_secure_installation来安全初始化。该脚本能:

  1. 为数据库root用户设置或重置密码
  2. 禁止匿名用户登录
  3. 禁止root用户的远程访问,只允许本地localhost访问
  4. 删除test数据库(任何人都可以访问的数据库)
  5. 刷新授权表使修改生效。也就是上边的四项生效。
mysql_secure_installation  #执行这个后,会一步一步来执行初始化安全脚本。需要手动来输入进行下去的。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
  #因为之前没有设置过root的密码。这里直接回车。
Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
  #输入y,回车。开始设置密码(linux下输入密码是不可见的)。
Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
  #密码设置成功后,是否移除匿名用户。输入y,回车。移除匿名用户。
Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
  #是否禁止root用户远程登录。输入y,回车。为了安全,请禁止。
Disallow root login remotely? [Y/n] y
... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
  #是否移除test数据库。输入n,回车。这里不移除。
Remove test database and access to it? [Y/n] n
... skipping.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
  #是否刷新授权表生效。输入y,回车。刷新授权表之后,上边的设置才生效。
Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!重启 (restart), 停止(stop), 启动(start)

通过上边的安全初始化。数据库密码设置了,root远程登录也禁用了。那么如果又想使用root用户远程登录呢。只要把user表里面的host字段改为%就可以了。

mysql -u root -p   #回车,会让你输入数据库密码。密码正确后。
update mysql.user set host="%" where host="127.0.0.1";   #执行修改host

尾语

mariadb安装成功了。为了方便管理,我们通常使用phpmyadmin。接下来,是要安装 phpmyadmin以及配置nginx, 使得远程访问到phpmyadmin

发表评论

电子邮件地址不会被公开。 必填项已用*标注