使用独立配置文件来实现 mysql 的单机多实例
一下教程皆以已在 /usr/local 下安装了 mysql 为说明
我们将在原 3306 实例的基础上新建 3307 和 3308 两个实例
1、创建实例目录
[root@localhost ~]# mkdir /usr/local/mysql{3307,3308}/data -p
[root@localhost ~]# chown mysql.mysql /usr/local/mysql{3307,3308} -R
2、初始化数据目录
# 这里我们使用 --initialize-insecure 来让生成的新实例的数据库密码为空
[root@localhost ~]# mysqld --no-defaults \
--initialize-insecure \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql3307/data \
--user=mysql \
--explicit_defaults_for_timestamp
[root@localhost ~]# mysqld --no-defaults \
--initialize-insecure \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql3308/data \
--user=mysql \
--explicit_defaults_for_timestamp
3、分配独立配置文件
这里简单说一下,mysql 的多实例是通过不同的配置创建多个进程,basedir 是一样的,实例拥有独立的配置文件和数据目录 datadir,而 mysql 加载配置的过程为:
/etc/my.cnf > basedir/my.cnf > datadir/my.cnf
我们需要把实例的配置文件隔离开,这里将配置文件放在每个 datadir 下(在 etc 或 basedir 下就不要存在 my.cnf 了,当然配置些全局的参数在里面试没问题的,这里我们为了方便就不搞全局配置了,每个实例都是绝度的单独配置文件),待会我们还要修改 mysql 的服务控制脚本,将实例注册到系统服务中,方便使用 service / systemctl 进行管理
# 各实例的配置文件
cp /usr/local/mysql/support-files/my.cnf /usr/local/mysql/data
cp /usr/local/mysql/support-files/my.cnf /usr/local/mysql3307/data
cp /usr/local/mysql/support-files/my.cnf /usr/local/mysql3308/data
配置示例:以 3308 为例,其他灵活更改就好
[client]
port = 3308
socket = /tmp/mysql3308.sock
[mysqld]
port = 3308 #注意
socket = /tmp/mysql3308.sock #注意
datadir = /usr/local/mysql3308/data #注意
skip-external-locking
key_buffer_size = 32M
max_allowed_packet = 1M
table_open_cache = 128
sort_buffer_size = 768K
net_buffer_length = 8K
read_buffer_size = 768K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 16
query_cache_size = 16M
tmp_table_size = 32M
log-error = /usr/local/mysql3308/mysql3308_error.log #注意
pid-file = /usr/local/mysql3308/mysql3308.pid #注意
explicit_defaults_for_timestamp = true
#skip-networking
max_connections = 100
max_connect_errors = 5
open_files_limit = 65535
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
expire_logs_days = 10
early-plugin-load = ""
default_storage_engine = InnoDB
innodb_data_home_dir = /usr/local/mysql3308/data #注意
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql3308/data #注意
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 768K
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
把加载独立配置写入控制脚本,还有一种方法是直接用 mysqld_safe 命令去加载配置文件进行启动,用起来麻烦...关闭或者reload还得用 mysqladmin命令,我也贴出来吧,大家自行决定用哪一种
1、注册到系统服务中,方便使用 service 管理
# 各实例的控制脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql # 可能已经存在 自行决定是否覆盖
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql3307
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql3308
# 配置各实力的服务脚本
[root@localhost local]# vi /etc/init.d/mysql3308
# 修改如下
basedir=/usr/local/mysql
datadir=/usr/local/mysql3308/data
# 在 283 行有(灵活寻找 不同版本可能会 +- 若干行)
$bindir/mysqld_safe --datadir="$datadir" .....
# 修改如下,即为启动指定加载的配置文件
$bindir/mysqld_safe --defaults-file="$datadir/my.cnf" --datadir="$datadir" .....
其他的实例请对应灵活修改
2、或者你可以直接使用 msyqld_safe 命令方式
# 使用 mysqld_safe 命令加载指定的配置文件启动
[root@localhost ~]# mysqld_safe --defaults-file=/usr/local/mysql3308/data/my.cnf >/dev/null 2>&1 &
# 使用 mysqladmin 命令 shutdown 或 reload
[root@localhost ~]# mysqladmin -u root -p -S /tmp/mysql3308.sock shutdown|reload
4、启动实例
[root@localhost ~]# service mysql start
[root@localhost ~]# service mysql3307 start
[root@localhost ~]# service mysql3308 start
[root@localhost ~]# service mysql status
[root@localhost ~]# service mysql3307 status
[root@localhost ~]# service mysql3308 status
[root@localhost ~]# service mysql stop|restart
[root@localhost ~]# service mysql3307 stop|restart
[root@localhost ~]# service mysql3308 stop|restart
5、修改初始密码
# 原密码为空 设置新密码为 123456
[root@localhost ~]# mysqladmin -uroot -p password 123456 -S /tmp/mysql3308.sock
6、登录实例
[root@localhost ~]# mysql -u root -p -S /tmp/mysql3308.sock
mysql> select @@port;
+--------+
| @@port |
+--------+
| 3308|
+--------+
1 row in set (0.00 sec)
mysql> select @@socket;
+---------------------+
| @@socket |
+---------------------+
| /tmp/mysql3308.sock |
+---------------------+
1 row in set (0.00 sec)
7、查看实例运行状态
[root@localhost ~]# ps -ef | grep mysqld_safe | grep -v grep
可以看到有三个数据库实例正在运行,加载不同的配置文件,不同的数据目录
[root@localhost ~]# ps -ef | grep mysqld_safe | grep -v grep
root 31374 1 0 10:41 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql3307/var/my.cnf --datadir=/usr/local/mysql3307/var --pid-file=/usr/local/mysql3307/mysql3307.pid
root 31949 1 0 10:41 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql3308/var/my.cnf --datadir=/usr/local/mysql3308/var --pid-file=/usr/local/mysql3308/mysql3308.pid
root 32522 1 0 10:41 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/var/my.cnf --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/mysql.pid
至此,独立配置文件的 mysql 多实例到此就结束了,主要的步骤为
1、创建实例数据库目录,使用 mysqld initialize 命令进行初始化
2、修改配置文件,修改服务脚本
3、启动实例服务
4、使用 mysqladmin 设置密码
5、使用 service 管理实例