系列教程
MySQL系列之開篇 MySQL關系型數據庫基礎概念
MySQL系列之一 MariaDB-server安裝
MySQL系列之三 基礎篇
MySQL系列之四 SQL語法
MySQL系列之五 視圖、存儲函數、存儲過程、觸發器
MySQL系列之六 用戶與授權
MySQL系列之七 MySQL存儲引擎
MySQL系列之八 MySQL服務器變量
MySQL系列之九 mysql查詢緩存及索引
MySQL系列之十 MySQL事務隔離實現并發控制
MySQL系列之十一 日志記錄
MySQL系列之十二 備份與恢復
MySQL系列之十三 MySQL的復制
MySQL系列之十四 MySQL的高可用實現
MySQL系列之十五 MySQL常用配置和性能壓力測試
什么是MySQL多實例?
簡單地說,MySQL多實例就是在一臺服務器上同時開啟多個不同的服務端口(如:3306,3307),同時運行多個MySQL服務進程,這些服務進程通過不同的socket監聽不同的服務端口來提供服務。
這些MySQL多實例共用一套MySQL安裝程序,使用不同的my.cnf(也可以相同)配置文件、啟動程序(也可以相同)和數據文件。在提供服務時,多實例MySQL在邏輯上看來是各自獨立的,它們根據配置文件的對應設定值,獲得服務器相應數量的硬件資源。
打個比方吧,MySQL多實例就相當于房子的多個臥室,每個實例可以看作一間臥室,整個服務器就是一套房子,服務器的硬件資源(cpu,men,disk)、軟件資源(CentOS操作系統)可以看作房子的衛生間、廚房、客廳,是房子的共用資源。若你是北漂的小伙伴,與朋友一起租房子,相信更好理解,大家蝸居在一起,休息在自己的臥室,出來活動肯定是要共用上述公共資源。這樣就可以很好的理解MySQL多實例了。
其實很多網絡服務都是可以配置多實例的,例如nginx、Apache、haproxy、redis等都可以配置多實例。這在門戶網站使用都很廣泛。
在一臺物理機中需要多個測試環境,那么就需要用到了搭建數據庫的多個實例,多個實例的意思就是運行多份程序,實例與實例之間沒有影響。要注意監聽的端口需要不同。
環境:CentOS7.5,編譯安裝MariaDB-10.2.15版本,軟件安裝目錄:/app/mysql/
1)創建運行的目錄環境
[root@centos7 ~]# mkdir -p /mysqldb/{3306,3307,3308}/{etc,socket,pid,log,data,bin}
[root@centos7 ~]# chown -R mysql:mysql /mysqldb/
2)初始化數據庫
[root@centos7 ~]# cd /app/mysql/
[root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3306/data/ --user=mysql --basedir=/app/mysql/
[root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3307/data/ --user=mysql --basedir=/app/mysql/
[root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3308/data/ --user=mysql --basedir=/app/mysql/
以上是編譯安裝的,安裝目錄為/app/mysql/,需要先進入軟件的安裝目錄然后執行初始化腳本,如果是yum安裝的包,則直接運行mysql_install_db命令即可
3)提供配置文件并按需要修改
[root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3306/etc/my.cnf
[root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3307/etc/my.cnf
[root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3308/etc/my.cnf
[root@centos7 mysqldb]# cd /mysqldb/
[root@centos7 mysqldb]# vim 3306/etc/my.cnf
[mysqld]
port = 3306
datadir = /mysqldb/3306/data
socket = /mysqldb/3306/socket/mysql.sock
[root@centos7 mysqldb]# vim 3307/etc/my.cnf #按以上配置示例更改
[root@centos7 mysqldb]# vim 3308/etc/my.cnf
4)提供服務啟動腳本
[root@centos7 ~]# cat mysqld #腳本示例
#!/bin/bash
port=3306 #需要修改為當前實例的端口號
mysql_user="root"
mysql_pwd=""
cmd_path="/app/mysql/bin" #安裝目錄下的bin
mysql_basedir="/mysqldb" #實例數據庫文件所在目錄
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"
function_start_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf > /dev/null
else
printf "MySQL is running...\n"
exit
fi
}
function_stop_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit
else
printf "Stoping MySQL...\n"
${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
fi
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}
case $1 in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac
[root@centos7 ~]# cp mysqld /mysqldb/3306/bin/
[root@centos7 ~]# cp mysqld /mysqldb/3307/bin/
[root@centos7 ~]# cp mysqld /mysqldb/3308/bin/
[root@centos7 ~]# vim /mysqldb/3306/bin/mysqld
port=3306
[root@centos7 ~]# vim /mysqldb/3307/bin/mysqld
port=3307
[root@centos7 ~]# vim /mysqldb/3308/bin/mysqld
port=3308
5)修改腳本文件權限,防止密碼被別人看到
[root@centos7 ~]# chmod 700 /mysqldb/3306/bin/mysqld
[root@centos7 ~]# chmod 700 /mysqldb/3307/bin/mysqld
[root@centos7 ~]# chmod 700 /mysqldb/3308/bin/mysqld
6)啟動服務
[root@centos7 ~]# service mysqld stop #保證自己原來的服務停止,釋放3306端口
[root@centos7 ~]# /mysqldb/3306/bin/mysqld start #啟動服務
[root@centos7 ~]# /mysqldb/3307/bin/mysqld start
[root@centos7 ~]# /mysqldb/3308/bin/mysqld start
[root@centos7 ~]# ss -tnl #如果看到三個實例監聽的端口都打開后說明服務啟動正常
LISTEN 0 80 :::3306 :::*
LISTEN 0 80 :::3307 :::*
LISTEN 0 80 :::3308 :::*
7)連接測試
[root@centos7 ~]# mysql -S /mysqldb/3306/socket/mysql.sock #使用-S指定套接字文件
Server version: 10.2.15-MariaDB-log Source distribution
MariaDB [(none)]> show variables like '%port'; #查看端口是否是3306
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| extra_port | 0 |
| large_files_support | ON |
| port | 3306 |
| report_port | 3306 |
+---------------------+-------+
4 rows in set (0.00 sec)
[root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock #再連接測試一下3307和3308
Server version: 10.2.15-MariaDB-log Source distribution
MariaDB [(none)]> show variables like '%port';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| extra_port | 0 |
| large_files_support | ON |
| port | 3307 |
| report_port | 3307 |
+---------------------+-------+
4 rows in set (0.00 sec)
[root@centos7 ~]# mysql -S /mysqldb/3308/socket/mysql.sock
Server version: 10.2.15-MariaDB-log Source distribution
MariaDB [(none)]> show variables like '%port';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| extra_port | 0 |
| large_files_support | ON |
| port | 3308 |
| report_port | 3308 |
+---------------------+-------+
4 rows in set (0.00 sec)
多實例搭建成功!
8)使用這條命令來停止實例
[root@centos7 ~]# /mysqldb/3306/bin/mysqld stop
9)最后一步:給root用戶加個密碼把~
[root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock
Server version: 10.2.15-MariaDB-log Source distribution
MariaDB [(none)]> update mysql.user set password=PASSWORD("your_password") where user='root';
Query OK, 4 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
| root | centos7 | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
| root | 127.0.0.1 | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
| root | ::1 | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
| | localhost | |
| | centos7 | |
+------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)
[root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock -uroot -p'your_password' #指定密碼,再次登錄OK~
最后將你的密碼加入bin/mysqld腳本文件中,防止服務無法啟動
到此這篇關于MySQL系列之二 多實例配置的文章就介紹到這了,更多相關MySQL 多實例配置內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- MySQL數據庫入門之多實例配置方法詳解
- MySQL多實例配置方案
- mysql使用mysqld_multi部署單機多實例的方法教程
- 快速實現MySQL的部署以及一機多實例部署
- 基于mysql多實例安裝的深入解析