本文主要介紹在CentOS6.9下快速安裝和部署MySQL多實例mysql
基本流程:
linux
1.Mysql多實例介紹sql
2.安裝MySQL多實例數據庫
3.建立MySQL多實例的數據文件目錄以及配置文件安全
4.建立MySQL多實例的啓動文件服務器
5.配置文件權限和軟連接app
6.初始化MySQL多實例的數據庫文件socket
7.啓動MySQL多實例數據庫tcp
8.配置和管理MySQL多實例數據庫ide
流程一:Mysql多實例介紹
簡單的說,Mysql多實例就是在一臺服務器上同時開啓多個不一樣的服務端口(如 : 3306/3307/3308)同時運行多個Mysql服務器,這些服務進程經過不一樣的socket來監聽不一樣的服務端口來提供服務
這些Mysql多實例共用一套Mysql安裝程序,使用不一樣的my.cnf配置文件,啓動程序,和數據文件,在提供服務時,多實例Mysql在邏輯上來看是各自獨立的,他們根據配置文件對應設定值,得到服務器相應的資源
流程二:安裝MySQL多實例
1)安裝MySQL所需的依賴包
yum install ncurses-devel libaio-devel -y
yum install cmake -y
2)獲取MySQL二進制包以及安裝
useradd -s /sbin/nologin -M mysql
id mysql
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.32-linux2.6-x86_64.tar.gz 解壓並建立軟鏈接(這是二進制安裝包,僅須要解壓就能夠,不須要cmake/configure,make&&make install等過程)
tar xf mysql-5.5.32-linux2.6-x86_64.tar.gz
mkdir -p /application/
mv mysql-5.5.32-linux2.6-x86_64 /application/mysql-5.5.32
ln -s /application/mysql-5.5.32/ /application/mysql
cd /application/mysql
ls -l support-files/*.cnf
流程三:建立MySQL多實例的數據文件目錄以及配置文件
mkdir -p /data/{3306,3307}/data
cd /data/3306
[root@localhost 3306]# cat my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/3306
socket=/data/3306/mysql.sock
log-error=/data/3306/mysqlerr.log
log_bin=/data/3306/mysql-bin
binlog_format=row
skip_name_resolve=1
server_id=3306
port=3306
cd /data/3307
[root@localhost 3307]# cat my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/3307
socket=/data/3307/mysql.sock
log-error=/data/3307/mysqlerr.log
log_bin=/data/3307/mysql-bin
binlog_format=row
skip_name_resolve=1
server_id=3307
port=3307
#實際工做中咱們都是拿早已配置好的模板來進行修改的,這裏用醉簡單的模板來作演示
流程四:建立MySQL多實例的啓動文件
cd /data/3306
[root@localhost 3306]# cat mysqld
. /etc/init.d/functions
. /etc/profile
Start='/application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf --pid-file=/data/3306/3306.pid'
Stop='mysqladmin -uroot -S /data/3306/mysql.sock shutdown'
Port=`ss -tunlp|grep 3306|wc -l`
function START(){
if [ $Port -ne 1 ];then
$Start >/dev/null 2>&1 &
sleep 3
if [ $? -eq 0 ];then
action 'MySQL 3306 Starting' /bin/true
fi
else
action 'MySQL 3306 Already Exists' /bin/true
fi
}
function STOP(){
if [ $Port -ne 0 ];then
$Stop
if [ $? -eq 0 ];then
action 'MySQL Stoping Successfuly' /bin/true
fi
else
action 'MySQL already Stoped' /bin/true
fi
}
function RESTART(){
STOP
sleep 1
START
}
case $1 in
start)
START
;;
stop)
STOP
;;
restart)
RESTART
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
cd /data/3307
[root@localhost 3307]# cat mysqld
. /etc/init.d/functions
. /etc/profile
Start='/application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf --pid-file=/data/3307/3307.pid'
Stop='mysqladmin -uroot -S /data/3307/mysql.sock shutdown'
Port=`ss -tunlp|grep 3307|wc -l`
function START(){
if [ $Port -ne 1 ];then
$Start >/dev/null 2>&1 &
sleep 3
if [ $? -eq 0 ];then
action 'MySQL 3307 Starting' /bin/true
fi
else
action 'MySQL 3307 Already Exists' /bin/true
fi
}
function STOP(){
if [ $Port -ne 0 ];then
$Stop
if [ $? -eq 0 ];then
action 'MySQL Stoping Successfuly' /bin/true
fi
else
action 'MySQL already Stoped' /bin/true
fi
}
function RESTART(){
STOP
sleep 1
START
}
case $1 in
start)
START
;;
stop)
STOP
;;
restart)
RESTART
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
流程五:配置文件權限和軟連接
[root@localhost 3307]# chown -R mysql.mysql /data/
[root@localhost 3307]# find /data/ -name mysqld|xargs ls -l
-rw-r--r--. 1 mysql mysql 794 May 3 11:55 /data/3306/mysqld
-rw-r--r--. 1 mysql mysql 794 May 3 11:55 /data/3307/mysqld
[root@localhost 3307]# find /data/ -name mysqld|xargs chmod 700
[root@localhost 3307]# ln -s /application/mysql/bin/* /usr/local/sbin/
流程六:初始化MySQL多實例的數據庫文件
cd /application/mysql/scripts
./mysql_install_db --basedir=/application/mysql --datadir=/data/3306 --user=mysql
./mysql_install_db --basedir=/application/mysql --datadir=/data/3307 --user=mysql
初始化數據庫後能夠看到對應實例目錄下會多了以下文件,省略部分
[root@localhost scripts]# tree /data/|head -10
/data/
├── 3306
│ ├── data
│ ├── my.cnf
│ ├── mysql
│ │ ├── columns_priv.frm
│ │ ├── columns_priv.MYD
│ │ ├── columns_priv.MYI
│ │ ├── db.frm
│ │ ├── db.MYD
流程七:啓動MySQL多實例數據庫
sed -i "s#/usr/local/mysql#/application/mysql#g" /application/mysql/bin/mysqld_safe #修改腳本執行路徑
[root@localhost scripts]# /data/3306/mysqld start
MySQL 3306 Starting [ OK ]
[root@localhost scripts]# /data/3307/mysqld start
MySQL 3306 Starting [ OK ]
[root@localhost 3307]# netstat -tnlp | grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 7983/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 8271/mysqld
流程八:配置和管理MySQL多實例數據庫
1)加入開機自啓
[root@localhost 3306]# echo "#mysql multi instances" >> /etc/rc.local
[root@localhost 3306]# echo "/data/3306/mysqld start" >> /etc/rc.local
[root@localhost 3306]# echo "/data/3307/mysqld start" >> /etc/rc.local
2)登陸MySQL測試
[root@localhost 3306]# mysql -S /data/3306/mysql.sock #mysql.sock用於區分登陸不一樣的實例
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.32-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| data |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.01 sec)
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
3)MySQL多實例數據庫的管理方法
無密碼狀況下登陸數據庫方法:
mysql -S /data/3306/mysql.sock
mysql -S /data/3307/mysql.sock
重啓對應實例數據庫的命令:
/data/3306/mysqld restart
4)MySQL安全配置
經過mysqladmin命令爲MySQL不一樣實例的數據庫設置獨立的密碼,命令以下:
[root@localhost 3306]# mysqladmin -u root -S /data/3306/mysql.sock password 'ywxi123'
[root@localhost 3306]# mysqladmin -u root -S /data/3307/mysql.sock password 'ywxi123'
[root@localhost 3306]# mysql -uroot -pywxi123 -S /data/3306/mysql.sock
[root@localhost 3306]# mysql -uroot -pywxi123 -S /data/3307/mysql.sock
5)再增長一個MySQL的實例
mkdir -p /data/3308/data
\cp /data/3306/mysqld /data/3308/
\cp /data/3306/my.cnf /data/3308/
sed -i 's/3306/3308/g' /data/3308/my.cnf
sed -i 's/3306/3308/g' /data/3308/mysqld
chmod 700 /data/3308/mysqld
cd /application/mysql/scripts/
./mysql_install_db --basedir=/application/mysql --datadir=/data/3308 --user=mysql
chown -R mysql:mysql /data/3308/
egrep "server_id|log_bin" /data/3308/my.cnf
/data/3308/mysqld start
netstat -tnlp | grep 3308