======方法一======
修改/etc/init.d/mysql 啟動檔案及/etc/my.cnf mysql 組態設定檔。
- 建立第二個執行個體資料儲存的目錄#mkdir -p /var/lib/mysql3307
- 修改該執行個體的權限chown mysql:mysql /var/lib/mysql3307/
- 修改mysql設定檔,通常只要增加或修改 port,datadir,socket在這個區段[mysqld]cp -p /etc/my.cnf /etc/my3307.cnf
vim /etc/my3307.cnf
~略~
port = 3307
datadir = /var/lib/mysql3307/
socket = /var/lib/mysql3307/mysql.sock
~略~
- 修改重要的啟動檔。本範例的啟動檔是截取Mysql-5.6.x版本/etc/init.d/mysqlcp -p /etc/init.d/mysql
或若是原本不是Mysql-5.6.x的版本,可以到[[http://dev.mysql.com/downloads/mysql/|Mysql官網下載]],並擷取其設定檔#mkdir /tmp/test;cd /tmp/test/;rpm2cpio MySQL-server-5.6.x|cpio -idvc
#ls -l /tmp/test/etc/init.d/mysql
#cp -p /tmp/test/etc/init.d/mysql /etc/init.d/mysql3307
* 約在138列位置後面插入port 相關參數--port=*) port=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
* 約在215列位置修改設定檔路徑,換成/etc/my3307.cnfconf=/etc/my3307.cnf
* 約在257列位置增加 -c /etc/my3307.cnf 相關參數parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server -c /etc/my3307.cnf`
* 約在284列位置增加 --port="$port" , --socket="$datadir"/mysq.sock相關參數$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --port="$port" --socket="$datadir"/mysq.sock $other_args >/dev/null 2>&1 &
- 為/var/lib/mysql3307/安裝預設mysql資料庫mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf --datadir=/var/lib/mysql3307/
- 啟動mysql3307 試試看/etc/init.d/mysql3307 start
Starting MySQL.. SUCCESS!
- 連接Mysql3307試試看。因為多個執行個體(multiple instances)通常是以port ,及socket來區分,因此mysql client在連接時,要指定 port及socket參數mysql -uroot -P3307 -p -h127.0.0.1 -S /var/lib/mysql3307/
-u 帳號 , -h 連接該資料庫的IP或hostname , -S socket位置 , -P port Number,-p 密碼
======方法二 利用mysqld_multi工具======
方法一是多個設定檔及多個執行檔方式,來建立多個執行個體,像是/etc/init.d/mysql3307 -> /etc/my3307.cnf
/etc/init.d/mysql3306 -> /etc/my3306.cnf
但是,每次修改增加或修改設定檔是很麻煩,因此貼心的Mysql 便設計出mysqld_multi工具,只要單一啟動檔及單依設定檔就可以產生多個執行個體
- 建立兩個執行個體資料儲存的目錄 /mydqn /mydb2#mkdir /mydb;mkdir /mydb2
- 修改該執行個體的權限chown mysql:mysql /mydb;chown mysql:mysql /mydb2
- 為 /mydb , /mydb2 建立 mysql DB 基本資料mysql_install_db --user=mysql --defaults-file=/etc/my2.cnf --datadir=/mydb/
mysql_install_db --user=mysql --defaults-file=/etc/my2.cnf --datadir=/mydb2/
- 除了原有/etc/my.cnf以外,也可配置另一個設定檔/etc/my2.cnf
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
#user = root
#password = qwedcxza
[mysqld3308]
# GENERAL #
user = mysql
default_storage_engine = InnoDB
port = 3308
socket = /mydb/mysql3308.sock
pid_file = /mydb/mysql3308.pid
# MyISAM #
key_buffer_size = 16M
myisam_recover = FORCE,BACKUP
# SAFETY #
max_allowed_packet = 16M
max_connect_errors = 1000000
skip_name_resolve
innodb = FORCE
# DATA STORAGE #
datadir = /mydb/
[mysqld3309]
# GENERAL #
user = mysql
default_storage_engine = InnoDB
port = 3309
socket = /mydb/mysql3309.sock
pid_file = /mydb/mysql3309.pid
# MyISAM #
key_buffer_size = 16M
myisam_recover = FORCE,BACKUP
# SAFETY #
max_allowed_packet = 16M
max_connect_errors = 1000000
skip_name_resolve
innodb = FORCE
# DATA STORAGE #
datadir = /mydb2/
- 啟動 屬於/mydb 及 port=3308 ,/mydb/mysql3308.sockmysqld_multi --defaults-file=/etc/my2.cnf start 3308
- 啟動 屬於/mydb2 及 port=3309 ,/mydb/mysql3309.sockmysqld_multi --defaults-file=/etc/my2.cnf start 3309
- 測試。 port=3308 ,socket=/mydb/mysql3308.sock 登入資料庫mysql -uroot -P3308 -p -S /mydb/mysql3308.sock mysql -e "show tables"
- 測試 。 port=3309 ,socket=/mydb/mysql3309.sock 登入資料庫mysql -uroot -P3309 -p -S /mydb/mysql3309.sock mysql -e "show tables"
======參考資料======
* [[http://opensourcedbms.com/dbms/running-multiple-mysql-5-6-instances-on-one-server-in-centos-6rhel-6fedora/|Running Multiple MySQL 5.6 Instances on one server in CentOS 6/RHEL 6/Fedora]]
* [[http://rritw.com/a/shujuku/Mysql/20131119/444192.html|rhel6下,mysql5.6.14 多實例配置]]
* [[http://www.loliman3000.com/tech/2fe16d6c02408d34f4c93167.php|在同一台機器上運行多個 MySQL 服務]]