在同一台机器上配置两个MySQL实例,实现方法也可以参考我的另外一篇文档。
同一台机器上配置两个MySQL实例(一)
1.虚拟机准备
1.1. VMware Workstation Pro 12.1
内存:建议至少2G
硬盘:建议至少40G,动态分配
1.2. 操作系统准备
操作系统为CentOS 6.5 64bit
IP:192.168.0.13
主机名:source
1.3. MySQL软件准备
mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
2.安装前系统环境配置调整
2.1. 关闭SELinux
2.2. 关闭系统防火墙
2.3. 调整I/O调度系统为deadline模式
2.4. swap分区的设置
2.5. 操作系统的限制
2.6. 关闭numa
此部分略,可参考之前发布的一篇文章来配置
centos6.5上安装mysql 5.7.20
3.安装规划
软件包目录:/opt/soft
MySQL家目录 /usr/local
MySQL实例1数据目录 /data/mysql3306
MySQL实例2数据目录 /data/mysql3307
4.创建目录
mkdir -p /opt/soft
mkdir -p /data/mysql3306
mkdir -p /data/mysql3307
5.创建MySQL用户
useradd mysql -s /sbin/nologin
passwd mysql
–密码为oracle123
6.安装MySQL软件
cd /opt/soft
tar -xzf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local
cd /usr/local
ln -s mysql-5.7.20-linux-glibc2.12-x86_64 mysql
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /data/mysql3306
chown -R mysql:mysql /data/mysql3307
注意,为了在任何路径下可以执行mysql命令,建议设置环境变量。
编辑root用户的.bash_profile,添加如下环境变量。
export PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/bin
复制
7.编辑参数文件
vi /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
[mysqld3306]
user = mysql
port = 3306
socket = /tmp/mysql3306.sock
pid-file = /tmp/mysql3306.pid
basedir = /usr/local/mysql
datadir = /data/mysql
[mysqld3307]
user = mysql
port = 3307
socket = /tmp/mysql3307.sock
pid-file = /tmp/mysql3307.pid
basedir = /usr/local/mysql
datadir = /data/mysql3307
说明:mysqld3306和mysqld3307两者后面的数字是mysqld进程的组号,编号可以是任何正整数,不是特指的端口号。在mysql中,这个编号称为段序列,即GNR。
8.mysql数据库初始化
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3306
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3307
9.修改登录密码
–跳过权限表,启动mysql实例
mysqld_safe --user=mysql --port=3306 --socket=/tmp/mysql3306.sock --pid-file=/tmp/mysql3306.pid --basedir=/usr/local/mysql --datadir=/data/mysql3306 --skip-grant-tables &
复制
mysqld_safe --user=mysql --port=3307 --socket=/tmp/mysql3307.sock --pid-file=/tmp/mysql3307.pid --basedir=/usr/local/mysql --datadir=/data/mysql3307 --skip-grant-tables &
复制
本地连接mysql实例
mysql -uroot -P 3306 --protocol=tcp -p
mysql -uroot -P 3307 --protocol=tcp -p
以–skip-grant-tables跳过权限表,启动mysql实例,登录连接数据库时,输入的错误密码或者空密码,都可以登录mysql数据库。
use mysql
select Host,user,authentication_string,password_expired from user;
update user set password_expired=‘N’ where user=‘root’;
#修改root用户的密码为永不过期
update user set authentication_string=password(‘oracle123’) where user=‘root’;
#修改localhost对应root用户的密码为oracle123
flush privileges;
10.启动和关闭mysql实例
杀掉mysql进程,然后重启mysql实例
ps -ef|grep mysql
kill -9 进程号
–启动mysql实例
mysqld_multi --defaults-file=/etc/my.cnf start 3306
mysqld_multi --defaults-file=/etc/my.cnf start 3307
–关闭mysql实例
mysqld_multi --defaults-file=/etc/my.cnf stop 3306 --user=root --password=oracle123
mysqld_multi --defaults-file=/etc/my.cnf stop 3307 --user=root --password=oracle123
注意:使用mysqld_multi启动和停止mysql实例时,指定的3306和3307是GNR号,不是端口号。
部分操作日志:
[root@source bin]# mysqld_multi --defaults-file=/etc/my.cnf start 3306 [root@source bin]# [root@source bin]# mysqld_multi --defaults-file=/etc/my.cnf start 3307 [root@source bin]# [root@source bin]# ps -ef|grep mysql root 7556 1 0 20:29 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql --port=3306 --socket=/tmp/mysql3306.sock --pid-file=/tmp/mysql3306.pid --basedir=/usr/local/mysql --datadir=/data/mysql3306 mysql 7701 7556 0 20:29 pts/0 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql3306 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=source.err --pid-file=/tmp/mysql3306.pid --socket=/tmp/mysql3306.sock --port=3306 root 7739 1 0 20:29 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql --port=3307 --socket=/tmp/mysql3307.sock --pid-file=/tmp/mysql3307.pid --basedir=/usr/local/mysql --datadir=/data/mysql3307 mysql 7884 7739 0 20:29 pts/0 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql3307 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=source.err --pid-file=/tmp/mysql3307.pid --socket=/tmp/mysql3307.sock --port=3307 root 7946 2063 0 20:37 pts/0 00:00:00 grep mysql [root@source bin]# [root@source bin]# mysqld_multi --defaults-file=/etc/my.cnf stop 3306 --user=root --password=oracle123 [root@source bin]# [root@source bin]# mysqld_multi --defaults-file=/etc/my.cnf stop 3307 --user=root --password=oracle123 [root@source bin]# [root@source bin]# ps -ef|grep mysql root 7988 2063 0 20:38 pts/0 00:00:00 grep mysql [root@source bin]#
复制
11.创建数据库帐号
grant all privileges on . to ‘root’@’%’ identified by ‘oracle123’;
flush privileges;
12.连接mysql实例
本地:
mysql -uroot -P 3306 --protocol=tcp -p
mysql -uroot -P 3307 --protocol=tcp -p
远程:
mysql -h192.168.0.13 -P 3306 -uroot -p
mysql -h192.168.0.13 -P 3307 -uroot -p
附录
同一个机器上配置两个实例技巧:
参数文件中可以指定user和password,用于启停mysql。
vi /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = admin
password = oracle123
[mysqld3306]
user = mysql
port = 3306
socket = /tmp/mysql3306.sock
pid-file = /tmp/mysql3306.pid
basedir = /usr/local/mysql
datadir = /data/mysql
[mysqld3307]
user = mysql
port = 3307
socket = /tmp/mysql3307.sock
pid-file = /tmp/mysql3307.pid
basedir = /usr/local/mysql
datadir = /data/mysql3307
–创建用户,用于启停mysql实例
grant shutdown on . to ‘admin’@‘localhost’ identified by ‘oracle123’;
flush privileges;
–正常启动mysql实例
mysqld_multi --defaults-file=/etc/my.cnf start 3306
mysqld_multi --defaults-file=/etc/my.cnf start 3307
mysqld_multi --defaults-file=/etc/my.cnf start 3306-3307
–关闭mysql实例
mysqld_multi --defaults-file=/etc/my.cnf stop 3306
mysqld_multi --defaults-file=/etc/my.cnf stop 3307
mysqld_multi --defaults-file=/etc/my.cnf stop 3306-3307
操作日志:
[root@source bin]# ps -ef|grep mysql root 8586 2063 0 22:07 pts/0 00:00:00 grep mysql [root@source bin]# [root@source bin]# mysqld_multi --defaults-file=/etc/my.cnf start 3306 [root@source bin]# [root@source bin]# ps -ef|grep mysql root 8595 1 0 22:07 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql --port=3306 --socket=/tmp/mysql3306.sock --pid-file=/tmp/mysql3306.pid --basedir=/usr/local/mysql --datadir=/data/mysql3306 mysql 8736 8595 12 22:07 pts/0 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql3306 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=source.err --pid-file=/tmp/mysql3306.pid --socket=/tmp/mysql3306.sock --port=3306 root 8766 2063 0 22:07 pts/0 00:00:00 grep mysql [root@source bin]# [root@source bin]# mysqld_multi --defaults-file=/etc/my.cnf start 3307 [root@source bin]# [root@source bin]# ps -ef|grep mysql root 8595 1 0 22:07 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql --port=3306 --socket=/tmp/mysql3306.sock --pid-file=/tmp/mysql3306.pid --basedir=/usr/local/mysql --datadir=/data/mysql3306 mysql 8736 8595 2 22:07 pts/0 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql3306 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=source.err --pid-file=/tmp/mysql3306.pid --socket=/tmp/mysql3306.sock --port=3306 root 8775 1 0 22:07 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql --port=3307 --socket=/tmp/mysql3307.sock --pid-file=/tmp/mysql3307.pid --basedir=/usr/local/mysql --datadir=/data/mysql3307 mysql 8916 8775 11 22:07 pts/0 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql3307 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=source.err --pid-file=/tmp/mysql3307.pid --socket=/tmp/mysql3307.sock --port=3307 root 8946 2063 0 22:07 pts/0 00:00:00 grep mysql [root@source bin]# [root@source bin]# mysqld_multi --defaults-file=/etc/my.cnf stop 3306 [root@source bin]# [root@source bin]# mysqld_multi --defaults-file=/etc/my.cnf stop 3307 [root@source bin]# [root@source bin]# ps -ef|grep mysql root 8995 2063 0 22:11 pts/0 00:00:00 grep mysql [root@source bin]#
复制
[root@source bin]# ps -ef|grep mysql root 9399 2063 0 22:13 pts/0 00:00:00 grep mysql [root@source bin]# [root@source bin]# mysqld_multi --defaults-file=/etc/my.cnf start 3306-3307 [root@source bin]# [root@source bin]# ps -ef|grep mysql root 9408 1 0 22:13 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql --port=3306 --socket=/tmp/mysql3306.sock --pid-file=/tmp/mysql3306.pid --basedir=/usr/local/mysql --datadir=/data/mysql3306 root 9416 1 0 22:13 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql --port=3307 --socket=/tmp/mysql3307.sock --pid-file=/tmp/mysql3307.pid --basedir=/usr/local/mysql --datadir=/data/mysql3307 mysql 9687 9408 7 22:13 pts/0 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql3306 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=source.err --pid-file=/tmp/mysql3306.pid --socket=/tmp/mysql3306.sock --port=3306 mysql 9694 9416 7 22:13 pts/0 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql3307 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=source.err --pid-file=/tmp/mysql3307.pid --socket=/tmp/mysql3307.sock --port=3307 root 9752 2063 0 22:13 pts/0 00:00:00 grep mysql [root@source bin]# [root@source bin]# mysqld_multi --defaults-file=/etc/my.cnf stop 3306-3307 [root@source bin]# [root@source bin]# ps -ef|grep mysql root 9788 2063 0 22:14 pts/0 00:00:00 grep mysql [root@source bin]#
复制