MySQL多實例安裝(相同版本)


本文以MySQL5.7為例,介紹在同一台機器下如何安裝多個MySQL實例。
環境:RHEL 6.5 + MySQL 5.7

1.單實例MySQL安裝

先來看下MySQL5.7單實例的安裝方法(這里引用官方文檔的安裝步驟):
shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> mkdir mysql-files
shell> chown mysql:mysql mysql-files
shell> chmod 750 mysql-files
shell> bin/mysqld --initialize --user=mysql 
shell> bin/mysql_ssl_rsa_setup              
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server

--修改/etc/profile 增加
export PATH=/usr/local/mysql/bin:$PATH

--需要修改密碼才可以正常操作數據庫:
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> alter user 'root'@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)

可以看到單實例MySQL的安裝非常簡單,只需創建了必要的用戶組和用戶,解壓二進制軟件包,初始化然后調整下權限基本就OK了。

2.多實例MySQL配置

下面來看下多實例MySQL配置,如果需要安裝多實例在同一台機器上,主要4個地方的配置需要區分:端口(Port)、數據目錄(datadir)、socket文件、server-id標識。(注:對其他配置可以根據實際需求去自定義各個實例的一些參數) MySQL的配置文件my.cnf支持標簽重定義,比如我這里安裝4個實例,分別定義為[mysqld1]、[mysqld2]、[mysqld3]、[mysqld4]。

舉例來說,我在原本的標准my.cnf配置文件中增加如下配置內容:

...這里省略原本的my.cnf配置內容...

[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin
Log=/usr/local/mysql/multi.log

[mysqld1]
server-id=101
datadir=/data/mysqldata/3307
socket=/tmp/mysql.sock3307
port=3307

[mysqld2]
server-id=102
datadir=/data/mysqldata/3308
socket=/tmp/mysql.sock3308
port=3308

[mysqld3]
server-id=103
datadir=/data/mysqldata/3309
socket=/tmp/mysql.sock3309
port=3309

[mysqld4]
server-id=104
datadir=/data/mysqldata/3310
socket=/tmp/mysql.sock3310
port=3310

3.多實例MySQL初始化

多實例MySQL初始化:即分別初始化不同實例,也就是指定不同的datadir bin/mysqld --initialize --user=mysql --datadir=/data/mysqldata/3307 bin/mysqld --initialize --user=mysql --datadir=/data/mysqldata/3308 bin/mysqld --initialize --user=mysql --datadir=/data/mysqldata/3309 bin/mysqld --initialize --user=mysql --datadir=/data/mysqldata/3310
--創建多實例各自的datadir
[root@jystdrac2 mysqldata]# pwd
/data/mysqldata
[root@jystdrac2 mysqldata]# mkdir 3307 3308 3309 3310

--具體參照安裝單實例的步驟
[root@jystdrac2 local]# tar zxvf /public/ISO/mysql/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz 
[root@jystdrac2 local]# ln -s mysql-5.7.28-linux-glibc2.12-x86_64 mysql

--多實例MySQL初始化
[root@jystdrac2 mysql]# pwd
/usr/local/mysql
[root@jystdrac2 mysql]# bin/mysqld --initialize --user=mysql --datadir=/data/mysqldata/3307
[root@jystdrac2 mysql]# bin/mysqld --initialize --user=mysql --datadir=/data/mysqldata/3308
[root@jystdrac2 mysql]# bin/mysqld --initialize --user=mysql --datadir=/data/mysqldata/3309
[root@jystdrac2 mysql]# bin/mysqld --initialize --user=mysql --datadir=/data/mysqldata/3310

記錄好每個MySQL實例默認生成的密碼:

yD*jUO%pj4ta
aHiLky?Ge28k
psPWYuk/)8=j
<8Pk#rxteaqx

修改密碼,我這里測試環境為了方便統一設置密碼為123,如果是生產環境切記要設計符合客戶要求的密碼安全策略:

[root@jystdrac2 3307]# mysql -uroot -S/tmp/mysql.sock3307 -p
yD*jUO%pj4ta
mysql> set password='123';

mysql -uroot -S/tmp/mysql.sock3308 -p
mysql -uroot -S/tmp/mysql.sock3309 -p
mysql -uroot -S/tmp/mysql.sock3310 -p

多實例MySQL開機啟動項設置:

[root@jystdrac2 mysql]# chkconfig --list|grep mysql
[root@jystdrac2 mysql]# cp support-files/mysqld_multi.server /etc/init.d/mysqld_multi
[root@jystdrac2 mysql]# chkconfig --add mysqld_multi
[root@jystdrac2 mysql]# chkconfig --list|grep mysql
mysqld_multi    0:off   1:off   2:on    3:on    4:on    5:on    6:off

4.多實例MySQL常用管理命令

多實例MySQL常用管理命令:
--顯示多實例mysqld的運行狀態
mysqld_multi report

--啟動[mysqld1]
mysqld_multi start 1

--啟動[mysqld2]
mysqld_multi start 2

--啟動所有多實例mysqld進程
mysqld_multi start

--通過socket連接到指定的MySQL實例
mysql -uroot -S/tmp/mysql.sock3307 -p
mysql -uroot -S/tmp/mysql.sock3308 -p
mysql -uroot -S/tmp/mysql.sock3309 -p
mysql -uroot -S/tmp/mysql.sock3310 -p

--確認連接實例的端口信息
show variables like '%port%';

最后確認下4個MySQL實例的啟動、關閉均正常:

[root@jystdrac2 mysql]# 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
MySQL server from group: mysqld4 is running
[root@jystdrac2 mysql]# ps -ef|grep mysql
root     10923     1  0 23:48 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --server-id=101 --datadir=/data/mysqldata/3307 --socket=/tmp/mysql.sock3307 --port=3307
root     10930     1  0 23:48 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --server-id=102 --datadir=/data/mysqldata/3308 --socket=/tmp/mysql.sock3308 --port=3308
root     10947     1  0 23:48 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --server-id=103 --datadir=/data/mysqldata/3309 --socket=/tmp/mysql.sock3309 --port=3309
root     10963     1  0 23:48 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --server-id=104 --datadir=/data/mysqldata/3310 --socket=/tmp/mysql.sock3310 --port=3310
mysql    11438 10923  0 23:48 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysqldata/3307 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --server-id=101 --log-error=jystdrac2.err --pid-file=jystdrac2.pid --socket=/tmp/mysql.sock3307 --port=3307
mysql    11461 10947  0 23:48 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysqldata/3309 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --server-id=103 --log-error=jystdrac2.err --pid-file=jystdrac2.pid --socket=/tmp/mysql.sock3309 --port=3309
mysql    11463 10930  0 23:48 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysqldata/3308 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --server-id=102 --log-error=jystdrac2.err --pid-file=jystdrac2.pid --socket=/tmp/mysql.sock3308 --port=3308
mysql    11472 10963  0 23:48 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysqldata/3310 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --server-id=104 --log-error=jystdrac2.err --pid-file=jystdrac2.pid --socket=/tmp/mysql.sock3310 --port=3310
root     12228  7701  0 23:51 pts/0    00:00:00 grep mysql
[root@jystdrac2 mysql]# mysqld_multi stop
[root@jystdrac2 mysql]# 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
MySQL server from group: mysqld4 is not running
[root@jystdrac2 mysql]# ps -ef|grep mysql
root     12400  7701  0 23:52 pts/0    00:00:00 grep mysql
[root@jystdrac2 mysql]# mysqld_multi start
[root@jystdrac2 mysql]# 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
MySQL server from group: mysqld4 is running
[root@jystdrac2 mysql]# 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM