Mysql 多实例
概述: 在一台物理主机上运行多个数据库服务
作用: 节约运维成本, 提高硬件利用率
配置步骤说明
我们以 mysql-5.7.20 为例
1- 安装支持多实例服务的软件包
1.1 解压软件
[root@host50~]# tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
1.2- 修改目录名
[root@host50 mysql-20]# mv mysql-5.7.20-linux-glibc2.12-x86_64//usr/local/mysql
1.3- 修改 PATH 变量
- [root@host50 local]# vim /etc/profile
- [root@host56 ~]# echo "export PATH=/usr/local/mysql/bin:$PATH">> /etc/profile
- [root@host50 local]# source /etc/profile
2- 修改主配置文件
- [root@host50 local]# vim /etc/my.cnf
- [mysqld_multi] // 启用多实例
- mysqld = /usr/local/mysql/bin/mysqld_safe // 指定进程文件的路径
- mysqladmin = /usr/local/mysql/bin/mysqladmin // 指定管理命令路径
- user = root // 指定调用进程的用户
- [mysqld1] // 实例进程名称 ,X 表示实例名称 , 如 [mysql1]
- port=3307 // 端口号
- datadir=/dataone // 数据库目录 , 要手动创建
- socket=/dataone/mysqld.sock // 指定 sock 文件的路径和名称
- log-error=/dataone/mysqld.log // 错误日志位置
- pid-file=/dataone/mysqld.pid // 进程 pid 号文件位置
- [mysqld2] // 实例进程名称 ,X 表示实例名称 , 如 [mysql1]
- port=3308 // 端口号
- datadir=/datatwo // 数据库目录 , 要手动创建
- socket=/datatwo/mysqld.sock // 指定 sock 文件的路径和名称
- log-error=/datatwo/mysqld.log // 错误日志位置
- pid-file=/datatwo/mysqld.pid // 错误日志位置
- 根据配置文件做相应设置
- root@host56 ~]# mkdir -p /dataone
- [root@host56 ~]# mkdir -p /datatwo
- [root@host56 ~]# useradd mysql
- c[root@host56 ~]# chown mysql:mysql /data*
* 为了安全可以更改文件权限
chown mysql:mysql /data*
- 初始化授权库
- [root@localhost bin]# ./mysqld --user=mysql --basedir= 软件安装目录 --datadir= 数据库目录 - initialize // 初始化授权库
- ]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/dataone --initialize
- ]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/datatwo --initialize
- 启动服务
[root@stu ~]# mysqld_multi start 实例编号 // 启动实例进程
- 客户端访问
- [root@host50~]# mysqld_multi start 1
- [root@host50 ~]# mysqld_multi start 2
- root@host56 ~]# netstat -utnlp | grep :3308
- tcp6 0 0 :::3308 :::* LISTEN 1156/mysqld
- [root@host56 ~]# netstat -utnlp | grep :3307
- tcp6 0 0 :::3307 :::* LISTEN 927/mysqld
- [root@host56 ~]#
- [root@localhost bin]# ./mysqld_multi --user=root --password=
密码 stop 实例编号 // 停止实例进程
6 访问多实例服务
连接实例服务 1
- [root@host50 ~]#mysql -uroot -p'bXk.5j!pjto#' -S /dataone/mysqld.sock
- mysql> ALTER USER user() identified by "123456";
- mysql> quit;
- ]# mysql -uroot -p123456 -S /dataone/mysqld.sock
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- +--------------------+
- 4 rows in set (0.00 sec)
- mysql>
连接实例服务 2
- [root@host50 ~]#mysql -uroot -p'bKsaf+xzk0V3' -S /datatwo/mysqld.sock
- mysql> alter user user() identified by "123456";
- Query OK, 0 rows affected (0.00 sec)
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- +--------------------+
- 4 rows in set (0.00 sec)
- mysql> quit
- Bye
- [root@host50 ~]# mysql -uroot -p123456 -S /datatwo/mysqld.sock
停止启动的实例服务
- ]# mysqld_multi --user=root --password = 密码 stop 实例编号
- [root@host50~]# netstat -utnlp | grep :3307
- tcp6 0 0 :::3307 :::* LISTEN 927/mysqld
- [root@host50 ~]#
- [root@host50 ~]#
- [root@host50~]# netstat -utnlp | grep :3308
- tcp6 0 0 :::3308 :::* LISTEN 1156/mysqld
- [root@host50 ~]# mysqld_multi --user=root --password=123456 stop 1
- [root@host50 ~]# netstat -utnlp | grep :3307
- [root@host50 ~]# netstat -utnlp | grep :3308
- tcp6 0 0 :::3308 :::* LISTEN 1156/mysqld
- [root@host50 ~]#
- [root@host50 ~]#
- [root@host50~]#
- [root@host50 ~]# mysqld_multi --user=root --password=123456 stop 2
- [root@host50~]# netstat -utnlp | grep :3308
- [root@host50~]# mysql -uroot -p123456 -S /datatwo/mysqld.sock
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket'/datatwo/mysqld.sock' (2)
来源: http://www.bubuko.com/infodetail-2685957.html