单台linux部署多个mysql实例实战
2017-09-04 本文已影响988人
超凡陆战队
- 了解什么是mysql多实例
MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务;
- 部署mysql多实例的两种方式
(1) 使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便;
(2) 通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理;
本文使用的是第二种方法来实现mysql的多实例;
- 安装环境准备
linxu环境:centos 7.1
mysql安装包: mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz(使用的是免编译二进制包安装) - 解压与迁移
tar -xvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.7.18-linux-glibc2.5-x86_64 /test/mysql/mysql
- 创建相关目录
mkdir -p /test/mysql/mysql/data
mkdir /test/mysql/mysql/data/mysql1
mkdir /test/mysql/mysql/data/mysql2
mkdir -p /test/mysql/mysql/data/log
mkdir -p /test/mysql/mysql/data/log/mysql1
mkdir -p /test/mysql/mysql/data/log/mysql2
- 创建mysql用户和组
groupadd -r mysql
useradd -r -g mysql mysql
授权
chown -R mysql:mysql /test/mysql/mysql/
- 添加环境变量
echo 'export PATH=$PATH:/test/mysql/mysql/bin' >> /etc/profile
source /etc/profile
- etc目录下创建my.cnf
好像从5.7开始包中没有提供my-default.cnf配置文件,我是从网上找了一个my.cnf然后修改的,可以直接复制下面的配置文件 - 修改my.cnf配置
这里要注意一下server_id和port不要冲突了
[client]
port=3306
socket=/test/mysql/mysql/mysql1.sock
[mysqld_multi]
mysqld = /test/mysql/mysql/bin/mysqld_safe
mysqladmin = /test/mysql/mysql/bin/mysqladmin
log = /test/mysql/mysql/data/log/mysqld_multi.log
[mysqld]
user=mysql
basedir =/test/mysql/mysql
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld1]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/test/mysql/mysql/data/mysql1
port=3306
server_id=mysql1
socket=/test/mysql/mysql/mysql1.sock
log-output=file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /test/mysql/mysql/data/log/mysql1/slow.log
log-error = /test/mysql/mysql/data/log/mysql1/error.log
[mysqld2]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/test/mysql/mysql/data/mysql2
port=3307
server_id=mysql2
socket=/test/mysql/mysql/mysql2.sock
log-output=file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /test/mysql/mysql/data/log/mysql2/slow.log
log-error = /test/mysql/mysql/data/log/mysql2/error.log
- 初始化数据库
初始化mysql1的数据库
/test/mysql/mysql/bin/mysql_ssl_rsa_setup --basedir=/test/mysql/mysql/ --datadir=/test/mysql/mysql/data/mysql1 --defaults-file=/etc/my.cnf
初始化mysql2的数据库
/test/mysql/mysql/bin/mysql_ssl_rsa_setup --basedir=/test/mysql/mysql/ --datadir=/test/mysql/mysql/data/mysql2 --defaults-file=/etc/my.cnf
- 检查数据库是否初始化成功
[root@mysql ~]# cd /test/mysql/mysql/data/mysql1
[root@mysql data]# ls
auto.cnf ibdata1 ib_logfile0 ib_logfile1 mysql mysql.pid performance_schema test
看一下目录下面文件有没有创建成功,mysql2同上
- 启动mysql:
bin/mysqld_multi start
查看启动状态:
bin/mysqld_multi report
- 登陆mysql并修改密码:
mysql -u root -p -S mysql1.sock
set password for root@'localhost'=password('123456');
flush privileges;
ps:这里说明一下,mysql5.7开始会初始化一个mysql密码,详见linux下mysql5.7初始密码查看及忘记密码重置
本文参考自http://www.cnblogs.com/xuchenliang/p/6843990.html/后实际操作记录