Linux下MariaDB 的二进制包安装方法

软件包的安装方式有三种:源码包安装、二进制包安装、rpm包安装。这三种安装方法都各有优劣。RPM安装:适合小环境,核心功能都具备,快速搭建环境,但它的版本一般都不会太高;二进制安装:它是发布出来时预先编译过的,既避免了编译的麻烦,又提供了增强功能;编译安装:它的要求高,要有编译环境,编译时可指定几乎所有选项,可满足你的所有选择。

今天就来讲讲二进制方式的安装,它即解决了版本的问题,又不会像源码编译一样需要我们花费大量的时间去编译。对于二进制格式的包,我们只需要解压缩后就能够使用数据库,这听起来很容易,但必须要注意一些问题。二进制格式的程序包是已经编译好的二进制程序,所以里边有很多脚本都是在固定的路径下执行的,所以安装过程中我们必须按照它所给的安装信息来安装。而安装MariaDB它的安装路径必须在/usr/local目录下,并且目录名称必须叫mysql。如果不这样设置,一些脚本无法运行,更别提能成功安装了。

安装步骤:
      1、下载二进制包
      2、解压到安装目录
      3、准备配置文件
      4、准备数据库
      5、准备日志文件
      6、准备服务脚本
      7、安全初始化

安装过程:

1、下载二进制包。下载地址

我这里选择最新版本的mariadb-10.3.14稳定版,进入后下载适用于64位操作系统的Linux x86_64版本

linux 二进制安装docker 自启动 linux如何安装二进制包_MariaDB 安装

2、解压到安装目录下

下载完成后用SFTP上传到Linux里,然后解压到/usr/local目录里:

tar -zxvf mariadb-10.3.14-linux-x86_64.tar.gz -C /usr/local

3、准备配置文件

根据文件我们要创建一个mysql的用户,它可以对以后的mysql数据库进行管理,同时我们还可以指定mysql的数据目录,这样以后它的存储数据就可以独立出来放置了,同时指明shell类型为nologin:

useradd -r -m -d /usr/local/mariadb-10.3.14-linux-x86_64/data -s /sbin/nologin mysql

创建一个mysql的软连接,这样可以方便以后的版本更新:

cd /usr/local
ln -sv mariadb-10.3.14-linux-x86_64 mysql

然后要把这个目录的管理权限给mysql管理:

chown -R root:mysql mysql/

准备一个my.cnf文件,并放入指定目录,my.cnf文件内容如下,修改安装目录和数据存储目录为上面设置好的对应目录:

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER
character_set_server=utf8
# MariaDB 安装目录
basedir = /usr/local/mariadb-10.3.14-linux-x86_64
# MariaDB 数据存储目录
datadir = /usr/local/mariadb-10.3.14-linux-x86_64/data
bind-address = 0.0.0.0
# 端口号
port = 3306
server_id = 1
socket = /tmp/mysql.sock
event_scheduler=on
slow_query_log = off
skip_name_resolve
default_storage_engine = InnoDB
lower_case_table_names = 1
innodb_buffer_pool_size = 4G
innodb_undo_log_truncate = ON
max_allowed_packet = 1G
group_concat_max_len = 102400
max_connections = 5000
binlog_cache_size = 2M
read_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
sync_binlog = 0
innodb_autoextend_increment = 1000
innodb_flush_method = O_DIRECT
innodb_read_io_threads = 10
innodb_write_io_threads = 10
interactive_timeout = 1800
wait_timeout = 1800
binlog_cache_size = 2048KB
back_log = 3000
max_connect_errors = 1000
concurrent_insert=2
innodb_autoextend_increment=128
innodb_buffer_pool_instances=1
innodb_log_file_size = 256M

把my.cnf放入指定目录:

mkdir /etc/mysql/
cp ./my.cnf  /etc/mysql/my.cnf

4、准备数据库文件

/usr/local/mysql/scripts/mysql_install_db --datadir=/usr/local/mariadb-10.3.14-linux-x86_64/data --user=mysql

执行后它会给一些警告信息,可以忽略。

5、准备日志文件

准备好日志文件,这样可以有利于以后的排错。当然由于这个服务是mysql管理的,而mysql是对/var/log/这个目录没有写权限的,所以这里我们还需要给mysql一个ACL的特殊权限才行,先创建好目录和文件,再给予mysql一个ACL的特殊权限,使它可以读写日志:

mkdir /var/log/mariadb/
touch /var/log/mariadb/mariadb.log
setfacl -R -m u:mysql:rwx /var/log/mariadb/mariadb.log

6、准备服务脚本

到这里MariaDB二进制包已经安装完毕了。我们现在就要把这个服务启动起来,所以就需要为这个服务准备启动脚本。当然这个脚本也在软件包里有提供,我们只需要复制出来就可以使用了。这个脚本也是放置在support-files这个目录里,它的里面有一个mysql.server的文件就是提供的服务脚本,复制到/etc/init.d/放置服务脚本的目录下:

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig --add mysql
chkconfig on

chkconfig --add mysql    ### 把这个服务加入到服务列表中去

chkconfig on    ### 这个服务设定为开机自启,默认为2、3、4、5这三种模式下开机会自动启动

启动mysql服务:

service mysql start

做完这些后我们就可以进入数据库了,但是它的命令路径不在默认的PATH路径下,而是在/usr/local/mysql/bin/目录下,所以我们每次要进入数据库还需要敲这长长的一串命令。这样太麻烦,所以我们就把这个命令的路径写入到PATH变量里面去,省的以后敲命令麻烦:

vim /etc/profile.d/mysql.sh
export  PATH=/usr/local/mysql/bin:$PATH
source /etc/profile.d/mysql.sh

添加完成后就可以使用 mysql 这个命令来直接进入数据库了

7、安全初始化

此时mysql这个服务以经开启了,但是它现在并不安全。因为现在任何用户都可以访问这个数据库,所以我们要给这个数据库设置管理用户,设定访问权限。下面这个xxxx用户是不需要密码就可以进入的:

mysql -u xxxxx

linux 二进制安装docker 自启动 linux如何安装二进制包_初始化_02

所以为了安全,我们要对数据库进行安全初始化设置。这个命令在mysql的命令包里是自带的所以我们只需要去执行这条命令就可初始化了,先使用quit;命令退出MariaDB,注意有结束符英文分号“;”

输入命令初始化:

mysql_secure_installation

linux 二进制安装docker 自启动 linux如何安装二进制包_mysql_03

linux 二进制安装docker 自启动 linux如何安装二进制包_mysql_04

从上图可以看到安全初始化后,匿名账号已经登录不进去了。现在管理员就可以自由的分配用户来进行对数据库的管理了。

   管理员进入数据库进行查看:

linux 二进制安装docker 自启动 linux如何安装二进制包_mysql_05

防火墙放行3306端口:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

立即生效

firewall-cmd --reload

若远程连接提示:

Host ‘xxx.xxx.xxx.xxx’ is not allowed to connect to this mariadb server

是因为未开启远程连接权限,使用命令mysql -uroot -p**** 进入mysql,给予root用户,所有IP授权:

grant all privileges on *.* to ‘root’ @’%’ identified by ‘password’ with grant option;
flush privileges;