在实际的开发过程中,可能会需要在一台服务器上部署多个MYSQL实例,那建议使用MYSQL官方的解决方案 mysqld_multi
1.修改my.cnf
如一个定义两个实例的参考配置:代码如下 | 复制代码 |
[mysqld_multi] mysqld = /usr/local/mysql/bin/mysqld_safemysqladmin = /usr/local/mysql/bin/mysqladminuser = your_userpass = your_password[mysqld1] datadir = /data/db/my1#连接 port = 3306socket = /tmp/mysql3306.sock#binlog log-bin=/data/db/mylog1/mysql-binbinlog_format=mixedbinlog_cache_size = 32Mexpire_logs_days = 30[mysqld2] datadir = /data/db/my2#连接 port = 3307socket = /tmp/mysql3307.sock#binlog log-bin=/data/db/mylog2/mysql-binbinlog_format=mixedbinlog_cache_size = 32Mexpire_logs_days = 3 |
2.创建数据目录
代码如下 | 复制代码 |
mkdir -p /data/db/my21mkdir -p /data/db/my2 chown mysql.mysql /data/db/my1 -Rchown mysql.mysql /data/db/my2 -R |
3.初始化DB
代码如下 | 复制代码 |
/usr/local/mysql/scripts/mysql_install_db --datadir=/data/db/my1/ -uroot (mysql_install_db也是MYSQL官方自带工具) /usr/local/mysql/scripts/mysql_install_db --datadir=/data/db/my2/ -urootchown mysql.mysql /data/db/my1/ -Rchown mysql.mysql /data/db/my2/ -R |
4. 安装工具
代码如下 | 复制代码 |
cp /usr/local/mysql/bin/my_print_defaults /usr/bin/ cp /usr/local/mysql/bin/mysqld_multi /usr/bin/ |
5.创建、授权用户
代码如下 | 复制代码 |
CREATE USER "your_user"@"192.168.1.%" IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO "your_user"@"192.168.1.%";flush privileges; |
至此,mysql多实例配置已经完毕。我们看到多个不同的MYSQL实例是共用my.cnf的。多实例命令行管理:
1.mysql启动代码如下 | 复制代码 |
mysqld_multi start 1 启动实例1 mysqld_multi start 1-2 启动实例1,2 |
2.mysql重启
代码如下 | 复制代码 |
mysqld_multi restart 1 重启实例1 mysqld_multi restart 1-2 重启实例1,2 |
3.mysql关闭
代码如下 | 复制代码 |
mysqld_multi stop 1 关闭实例1 mysqld_multi stop 1-2 关闭实例1,2 |
4.命令行登陆实例2
代码如下 | 复制代码 |
mysql -u your_user -p your_password -P3307 -S /tmp/mysql3307.sock |
Mysqld_multi启动、关闭、状态检查
要想调用mysqld_multi,使用下面的语法:shell> mysqld_multi [options] {start|stop|report} [GNR[,GNR] ...]
start、stop和report表示你想要执行的操作。你可以在单个服务器或多个服务器上执行指定的操作,取决于选项名后面的GNR 列。如果没有该列,mysqld_multi为选项文件中的所有服务器执行该操作。
每个GNR值代表一个选项组号或组号范围。GNR值应为选项文件中组名末尾的号。 例如,组[mysqld17]的GNR为17。要想指定组号的范围,用破折号间隔开第1个和最后1个号。GNR值10-13代表组[mysqld10]到[mysqld13]。可以在命令行中指定多个组或组范围,用逗号间隔开。GNR列不能有空格字符(空格或tab);空格字符后面的内容将被忽略掉。
该命令使用选项组[mysqld1]启动单个服务器:
代码如下 | 复制代码 |
shell> /usr/local/mysql/bin/mysqld_multi --defaults-extra-file=/etc/my.cnf start 1 |
该命令停止多个服务器,使用选项组[mysql8]和[mysqld10]至[mysqld13]:
代码如下 | 复制代码 |
shell>/usr/local/mysql/bin/mysqld_multi --defaults-extra-file=/etc/my.cnf stop 8,10-13 |
或者一下形式关闭单个服务器
代码如下 | 复制代码 |
shell> mysqladmin -u root -S /tmp/mysql3306.sock shutdown |
该命令查看多个服务器,使用选项组[mysql8]和[mysqld10]至[mysqld13]:
代码如下 | 复制代码 |
shell>/usr/local/mysql/bin/mysqld_multi --defaults-extra-file=/etc/my.cnf report 8,10-13 |