======方法一====== 修改/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.cnfvim /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 服務]]