Menu Close

在一台Linux服务器上安装多个MariaDB实例(一)使用单独的my.cnf文件

1. 简介

有两种MySQL部署多实例的方法,分别是:

  1. 使用官方自带的mysqld_multi来配置管理,特点是使用同一份MySQL配置文件,这种方式属于集中式管理,管理起来较为方便;
  2. 使用单独的 my.cnf 配置文件来单独配置实例,这种方式逻辑简单,数据库之间没有关联。

两种方法最大的区别在于:使用mysqld_multi方式,所有的实例共使用一个参数文件,使用第二种方法,则各自实例使用自己的参数文件。
以下

2. 实验环境

操作系统 :CentOS Linux release 7.8.2003 (Core)

数据库版本:10.5.8-MariaDB-log

预计划安装3个MySQL实例,规划信息为:

实例1 实例2 实例3
basedir=/usr/local/mysql
datadir=/data/3306/data
port=3306
socket=/data/3306/socket/mysqld.sock
参数文件:/data/3306/param/my.cnf
basedir=/usr/local/mysql
datadir=/data/3307/data
port=3307
socket=/data/3307/socket/mysqld.sock
参数文件:/data/3307/param/my.cnf
basedir=/usr/local/mysql
datadir=/data/3308/data
port=3308
socket=/data/3308/socket/mysqld.sock
参数文件:/data/3308/param/my.cnf

3. 实验过程

3.1. 安装MariaDB

(略)安装过程参见:

3.2. 创建数据文件存放路径

mkdir -p /data/3306/{param,data,log,socket,tmp}
mkdir -p /data/3307/{param,data,log,socket,tmp}
mkdir -p /data/3308/{param,data,log,socket,tmp}

3.3. 创建 my.cnf 参数配置文件

其中,各个实例的配置文件信息如下:

  • 实例一:
server-id = 174
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql/
# 设置mysql数据库的数据的存放目录
datadir=/data/3306/data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
# 大小写是否敏感
lower_case_table_names=1
innodb_buffer_pool_size=128M
socket=/data/3306/socket/mysqld.sock
# 错误日志
log-error = /data/3306/log/error.log
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306

3.4. 初始化数据库

/usr/local/mysql/scripts/mariadb-install-db --defaults-file=/data/3306/param/my.cnf
/usr/local/mysql/scripts/mariadb-install-db --defaults-file=/data/3307/param/my.cnf
/usr/local/mysql/scripts/mariadb-install-db --defaults-file=/data/3308/param/my.cnf

3.5. 修改文件属主

chown -R mysql:mysql /data/3306/
chown -R mysql:mysql /data/3307/
chown -R mysql:mysql /data/3308/

这一步很重要,如果文件权限不正确会造成mariadb服务无法启动! 例如出现如下无法访问 aria_log_control 文件的错误:

3.6. 启动数据库

nohup /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/param/my.cnf --user=mysql &
nohup /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/param/my.cnf --user=mysql &
nohup /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3308/param/my.cnf --user=mysql &

3.7. 检查mariadb的服务端口

netstat -anutp | grep -E '3306|3307|3308'

3.8. 本地登录数据库

  • 连接方式一
    使用服务器IP地址,MySQL创建完成后,数据库账号root@localhost只允许本地连接,参数“-h”后面用服务器IP被认为了远程连接。
mysql -uroot -p -h172.16.5.74 -P3306
# 密码为空

  • 连接方式二
    使用localhost访问数据库,无法连接。从报错信息中可以看到,MySQL实例使用的socket文件是默认/etc/my.cnf中配置的文件
mysql -uroot -p -hlocalhost -P3307

  • 连接方式三
    使用127.0.0.1访问数据库,无法连接。从报错的信息中得出是密码没有初始化。设置了root@localhost 的密码后即可完成登录。
mysql -uroot -p -h127.0.0.1 -P3307

解决方案:

mysql -uroot-sys-maint -p -h127.0.0.1 -P3307
# 密码为空

参考:https://cloud.tencent.com/developer/article/1142525

  • 连接方式四
    使用socket文件连接,可以正常访问。
mysql -S /data/3307/socket/mysqld.sock -p
# 密码为空

3.9. 修改数据库root@localhost密码

如果不修改在关闭数据库实例时会提示下列错误:

mysql> alter user root@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

3.9. 停止数据库

使用mysqladmin来关闭实例

mysqladmin -h127.0.0.1 -uroot -p -P3307 shutdown
# 输入上一步设置的密码


经过一段时间后,mariadb的服务被关闭。

参考

  • 在一台Linux服务器上安装多个MySQL实例(二)--使用单独的MySQL配置文件:https://www.cnblogs.com/lijiaman/p/12588095.html