同福

【MySQL】启动多个MySQL实例的方法(运行多个服务器端)

介绍

概念

有些时候我们需要启动多个MySQL实例,而不仅仅是多个数据库

那么问题来了,我们知道MySQL占用的默认端口是3306,如果要再启动一个实例,势必要占用其他端口才行,例如:3307,3308等等

可是要如何实现呢?请往下看

操作

关键参数

MySQL运行有这么几个关键参数

  • 端口:默认为3306,这个不用说了,端口相同肯定运行不起来

  • 安装目录:这个是可以共享的哦~~

  • 数据目录:这个必须分离开来,为每一个实例建立一套数据目录

  • socket:这个是MySQL的文件锁,必须分离开来,为每一个实例选择一个文件路径

  • pid:这个是MySQL的进程锁,记录这进程ID,必须分离开来。不过一般情况下进程锁是在数据目录下面的,所以我们就不用关心它了

  • lock:这个锁只是在Redhat/Suse下才会有,必须分离开来,为每一个实例选择一个文件路径

  • server-id:同步复制时候用到的,即使不用复制这个也必须唯一哦~~

  • server-uuid:服务器唯一ID,这个也必须唯一哦~~

好,有了上面的一堆特别参数,我们就知道要改什么了!

步骤

数据目录

毫无疑问的是我们要建立新的数据目录,这样我们才能搭建一套完全独立的数据库服务器环境啊

cd /tongfu.net/env/mysql/
mkdir data2rd
chown mysql.mysql -R data2rd

端口和socket

我们安装目录下建立配置文件my2rd.cnf(如果没有这个文件就自己创建一个)写入如下内容

# vi /tongfu.net/env/mysql/my2rd.cnf
[mysqld]

port = 3307
socket = /tmp/mysql2rd.sock

启动脚本

默认的启动脚本在support-files/mysql.server,我们需要为新实例复制出来一份

cd /tongfu.net/env/mysql/
cp support-files/mysql.server support-files/mysql2rd.server

修改新的启动脚本里的datadir一行,指向我们创建的新数据目录

datadir=/tongfu.net/env/mysql/data2rd/

在datadir下面增加一行defaultsfile,指向我们创建的cnf文件路径

defaultsfile=/tongfu.net/env/mysql/my2rd.cnf

修改启动服务的那一行,在最前面增加一个参数defaults-file

$bindir/mysqld_safe --defaults-file="$defaultsfile" --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &

初始化新环境

通过以下命令初始化新环境

cd /tongfu.net/env/mysql/
./bin/mysqld --defaults-file=/tongfu.net/env/mysql/my2rd.cnf --initialize --user=mysql --datadir=/tongfu.net/env/mysql/data2rd/

初始化成功后会得到默认root密码

2019-02-01T20:00:00.984252Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-02-01T20:00:02.569519Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-02-01T20:00:02.929479Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-02-01T20:00:03.008211Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: f67263e5-265b-11e9-9fbe-02420a100150.
2019-02-01T20:00:03.009632Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-02-01T20:00:03.011537Z 1 [Note] A temporary password is generated for root@localhost: %_?3rpaRy/7!

启动新环境实例

cd /tongfu.net/env/mysql/
./support-files/mysql2rd.server start

我们使用默认root密码来设置我们自己的密码,特殊字符记得转义一下

cd /tongfu.net/env/mysql/
./bin/mysqladmin -uroot -p"%_?3rpaRy/7\!" -P 3307 -S /tmp/mysql2rd.sock password "abcdef"

登录新环境

现在我们就可以登录新环境实例了,注意端口和socket哦~~

cd /tongfu.net/env/mysql/
./bin/mysql -uroot -pabcdef -P 3307 -S /tmp/mysql2rd.sock

看一下数据库列表,新环境只有这4个库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

好了,后面还可以用mysql2rd.server设置开机启动,这里我们就不再阐述了