mysql5.7多实例/增加新实例安装过程

之前也做过多实便的安装,mysql的多实例安装与关闭不过当时的版本是5.6的,由于5.7和5.6mysql的安装方式还是有所不同的,今天就测试一下mysql5.7多实例的安装。

环境说明:

os:  rhel6.3 64bit

mysql: 5.7.21


目前已存在一个实例:

root      2564  2538  0 23:31 pts/1    00:00:00 grep mysql
[root@qht131 ~]# ps -ef | grep mysql
root      1533     1  0 23:28 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/u01/mysql --pid-file=/u01/mysql/mysqld.pid
mysql     1880  1533  0 23:28 ?        00:00:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/u01/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/u01/log/mysql/mysql_3306.err --open-files-limit=8192 --pid-file=/u01/mysql/mysqld.pid --socket=/u01/mysql/mysql.sock
root      2566  2538  0 23:31 pts/1    00:00:00 grep mysql

1.修改my.cnf

[root@qht131 mysql]# cat /etc/my.cnf
[mysqld_multi]
mysqld    = /usr/local/mysql/bin/mysqld
mysqladmin = /usr/local/mysql/bin/mysqladmin
log        = /u01/log/mysql_multi.log

[mysqld1]
character_set_server= utf8
init_connect= 'SET NAMES utf8'
basedir= /usr/local/mysql
datadir= /u01/mysql
socket = /u01/mysql/mysql.sock
user=mysql #必须用mysql帐户启动mysql,避免用root来启动
port=3306
performance_schema=off
innodb_buffer_pool_size=32M
bind_address=0.0.0.0
skip-name-resolve=0
[mysqld2]
character_set_server= utf8
init_connect= 'SET NAMES utf8'
basedir= /usr/local/mysql
datadir= /u01/mysql2
socket = /u01/mysql2/mysql.sock
user=mysql
port=3307
performance_schema=off
innodb_buffer_pool_size=32M
bind_address=0.0.0.0
skip-name-resolve=0
character_set_server= utf8
init_connect= 'SET NAMES utf8'
basedir= /usr/local/mysql
datadir= /u01/mysql3
socket = /u01/mysql3/mysql.sock
user=mysql
port=3308
performance_schema=off
innodb_buffer_pool_size=32M
bind_address=0.0.0.0
skip-name-resolve=0

2.建立需要的目录:

[root@qht131 mysql]# mkdir -p /u01/mysql2
[root@qht131 mysql]# mkdir -p /u01/log/mysql2
[root@qht131 mysql]# mkdir -p /u01/mysql3
[root@qht131 mysql]# mkdir -p /u01/log/mysql3
[root@qht131 mysql]# chown -R mysql.mysql /u01

3.初始化各实例 以及开启SSL连接:

[root@qht131 mysql]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/u01/mysql2
 
 
2018-05-04T22:32:19.567383Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-05-04T22:32:20.937886Z 0 [Warning] InnoDB: New log files created, LSN=45790
2018-05-04T22:32:21.154932Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-05-04T22:32:21.244128Z 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: 027cc829-4feb-11e8-9103-000c29aa0615.
2018-05-04T22:32:21.246035Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2018-05-04T22:32:21.246980Z 1 [Note] A temporary password is generated for root@localhost: vd539qdjd#,B

[root@qht131 mysql]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/u01/mysql3
2018-05-04T22:33:34.514887Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-05-04T22:33:35.948344Z 0 [Warning] InnoDB: New log files created, LSN=45790
2018-05-04T22:33:36.150828Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-05-04T22:33:36.217487Z 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: 2f2ccf35-4feb-11e8-9402-000c29aa0615.
2018-05-04T22:33:36.221292Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2018-05-04T22:33:36.227321Z 1 [Note] A temporary password is generated for root@localhost: RcwAsh&A%9mr
[root@qht131 mysql]# /usr/local/mysql/bin/mysql_ssl_rsa_setup  --user=mysql --basedir=/usr/local/mysql --datadir=/u01/mysql2
Generating a 2048 bit RSA private key
.............................................................+++
.....+++
writing new private key to 'ca-key.pem'
-----
Generating a 2048 bit RSA private key
.......................+++
................+++
writing new private key to 'server-key.pem'
-----
Generating a 2048 bit RSA private key
....+++
..........................+++
writing new private key to 'client-key.pem'
-----
[root@qht131 mysql]# /usr/local/mysql/bin/mysql_ssl_rsa_setup  --user=mysql --basedir=/usr/local/mysql --datadir=/u01/mysql3
Generating a 2048 bit RSA private key
..............................................+++
...........................+++
writing new private key to 'ca-key.pem'
-----
Generating a 2048 bit RSA private key
...................................................................................................................+++
..+++
writing new private key to 'server-key.pem'
-----
Generating a 2048 bit RSA private key
..+++
..+++
writing new private key to 'client-key.pem'
-----

4.配置自动启动

[root@qht131 mysql]# cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi
[root@qht131 mysql]# chmod +x /etc/init.d/mysqld_multi
[root@qht131 mysql]# chkconfig --add mysqld_multi

5.启动所有的实例

[root@qht131 mysql]# /etc/init.d/mysqld_multi  start
[root@qht131 mysql]# /etc/init.d/mysqld_multi  report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
[root@qht131 mysql]# netstat -lntp | grep mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6800/mysqld
tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      6803/mysqld
tcp        0      0 0.0.0.0:3308                0.0.0.0:*                   LISTEN      6806/mysqld

已成功启动!

6.记得先要修改新添加的两个实例的root密码:

[root@qht131 mysql2]# mysql -S /u01/mysql2/mysql.sock -uroot -pvd539qdjd#,B

mysql> set password=password('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
[root@qht131 mysql2]# mysql -S /u01/mysql2/mysql.sock -uroot -pRcwAsh&A%9mr


mysql> set password=password('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

7.接着试下能否正常关闭

[root@qht131 mysql]# /etc/init.d/mysqld_multi  stop
 
 
[root@qht131 mysql]# /etc/init.d/mysqld_multi  report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running

没有关闭成功,查看一下多实例的Log:

[root@qht131 log]# tail -f mysql_multi.log
2018-05-04T21:52:32.951509Z 10 [Note] Access denied for user 'root'@'localhost' (using password: NO)
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
2018-05-04T21:52:32.958002Z 10 [Note] Access denied for user 'root'@'localhost' (using password: NO)
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
2018-05-04T21:52:32.965020Z 10 [Note] Access denied for user 'root'@'localhost' (using password: NO)
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'

发现mysqladmin连接不到数据库,在/etc/my.cnf中增加user和password试一下:

[mysqld_multi]
mysqld    = /usr/local/mysql/bin/mysqld
mysqladmin = /usr/local/mysql/bin/mysqladmin
log        = /u01/log/mysql_multi.log
user=root  #增加的user和password 
password=123456

增加了用户名和密码后还是不行,原因是mysqld_multi是通过调用my_print_defaults来读取实例的各项参数的,读取的结果如下:

[root@qht131 mysql2]# my_print_defaults mysqld_multi mysql1
--mysqld=/usr/local/mysql/bin/mysqld
--mysqladmin=/usr/local/mysql/bin/mysqladmin
--log=/u01/log//mysql_multi.log
[root@qht131 mysql2]# vi /etc/my.cnf
[root@qht131 mysql2]# /etc/init.d/mysqld_multi  stop
[root@qht131 mysql2]# my_print_defaults mysqld_multi mysql1
--mysqld=/usr/local/mysql/bin/mysqld
--mysqladmin=/usr/local/mysql/bin/mysqladmin
--log=/u01/log/mysql_multi.log
--user=root
--password=*****

由于读取的密码是加密的,自然就登入不了。解决的方法就是修改一下mysqld_multi脚本:

修改mysqld_multi的如下行

my $com= join ' ', 'my_print_defaults', @defaults_options, $group;

修改为

my $com= join ' ', 'my_print_defaults -s', @defaults_options, $group;

接着再关闭数据库就成功了:

[root@qht131 bin]# /etc/init.d/mysqld_multi  stop
[root@qht131 bin]# /etc/init.d/mysqld_multi  report
Reporting MySQL servers
MySQL server from group: mysqld1 is not running
MySQL server from group: mysqld2 is not running
MySQL server from group: mysqld3 is not running

参考:https://blog.csdn.net/zhengwei125/article/details/52413835

8.开启和关闭单个实例:

如果启动第一个也就是Port为3306的实例:

[root@qht131 u01]# mysqld_multi start 1
[root@qht131 u01]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is not running
MySQL server from group: mysqld3 is not running
[root@qht131 u01]# ps -ef | grep mysqld
mysql    12945     1  4 17:49 pts/2    00:00:00 /usr/local/mysql/bin/mysqld --character_set_server=utf8 --init_connect=SET NAMES utf8 --basedir=/usr/local/mysql --datadir=/u01/mysql --socket=/u01/mysql/mysql.sock --user=mysql --port=3306 --performance_schema=off --innodb_buffer_pool_size=32M --bind_address=0.0.0.0 --skip-name-resolve=0 --log-error=/u01/log/mysql/mysql_3306.err
root     12975  2781  0 17:49 pts/2    00:00:00 grep mysqld

我的情况GNR分别为1,2,3。所以单个启动时指定1,2,3就可以了。官方文档的说明如下:

Each GNR value represents an option group number or range of group numbers. The value should be the number at the end of the group name in the option file. For example, the GNR for a group named [mysqld17] is 17

关闭也是同理:

[root@qht131 u01]# mysqld_multi stop 1
[root@qht131 u01]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is not running
MySQL server from group: mysqld2 is not running
MySQL server from group: mysqld3 is not running

也可以用mysqladmin进行关闭

[root@qht131 u01]# mysqladmin -uroot -p -S /u01/mysql/mysql.sock shutdown

9.连接单实例,通过指定实例的sock文件来连接实例:

[root@qht131 u01]# mysql -uroot -p -S /u01/mysql/mysql.sock
[root@qht131 u01]# mysql -uroot -p -S /u01/mysql2/mysql.sock
[root@qht131 u01]# mysql -uroot -p -S /u01/mysql3/mysql.sock




猜你喜欢

转载自blog.csdn.net/jolly10/article/details/80194302
今日推荐