MySQL多實例安裝配置實現

    首先咱們要清楚什麼是多實例?所謂多實例就是用多個配置文件來啓動多個不一樣端口的進程,以不一樣的端口的形式爲外提供服務。
明白了多實例 咱們下面的操做和配置就一目瞭然了
首先咱們要安裝一套基礎的應用程序,也就是說單實例這個流程請參考http://www.javashuo.com/article/p-gasndutf-bb.htmlhtml

1.關閉單實例服務和開機啓動mysql

/etc/init.d/mysqld stop
chkconfig mysqld off

2.建立好多實例的目錄結構sql

mkdir -p /mysql_multi_case/{3306..3308}/data

3.分別在各個實例目錄下寫配置文件和啓動腳本,數據庫

如下是3306裏面的my.cnf配置bash

[client]
port        = 3306                      
socket      = /mysql_multi_case/3306/mysql.sock

[mysqld]
port        = 3306
socket      = /mysql_multi_case/3306/mysql.sock
basedir = /application/mysql
datadir = /mysql_multi_case/3306/data
open_files_limit = 1024
back_log = 600
max_connections = 800
max_connect_errors = 3000
table_cache = 614
external-locking = FALSE
max_allowed_packet = 8M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 100
thread_concurrency = 2
query_cache_size = 2M
query_cache_limit = 1M
query_cache_min_res_unit = 2k
thread_stack = 192k
tmp_table_size = 2M
max_heap_table_size = 2M
long_query_time = 1
pid-file = /mysql_multi_case/3306/mysqld.pid
log-bin = /mysql_multi_case/3306/mysqld-bin
relay-log = /mysql_multi_case/3306/relay-bin
relay-log-info-file = /mysql_multi_case/3306/relay-log.info
expire_logs_days = 7
key_buffer_size = 16M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
bulk_insert_buffer_size = 1M
lower_case_table_names = 1
skip-name-resolve
slave-skip-errors = 1032,1062
replicate-ignore-db = mysql

server-id   = 1                     

innodb_additional_mem_pool_size = 4M
innodb_buffer_pool_size = 32M
innodb_data_file_path = ibdata1:128M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 2M
innodb_log_file_size = 4M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0

[mysqldump]
quick
max_allowed_packet = 2M

[mysqld_safe]
log-error = /mysql_multi_case/3306/mysql_lee3306.err
pid-file = /mysql_multi_case/3306/mysqld.pid

  說明:這裏說一下配置文件須要注意的是裏面的端口信息必須是每一個實例的端口是惟一的不能重複。啓動腳本都是同樣的,只是啓動的端口信息不一樣,密碼和用戶看本身的喜愛配置app

如下是3306裏面的mysql啓動腳本socket

#!/bin/bash
#
#
#
#init
port=3306
mysql_user="root"
mysql_pwd="admin"
CmdPath="/application/mysql/bin"
mysql_sock="/mysql_multi_case/${port}/mysql.sock"

#startup function
function_start_mysql(){
	if [ ! -e "$mysql_sock" ];then
	  printf "Starting MySQL...\n"
	  /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/mysql_multi_case/${port}/my.cnf 2>&1 >/dev/null &
	else
	  printf "MySQL is running ... \n"
	  exit
	fi
}

#stop function
function_stop_mysql(){
	if [ ! -e "$mysql_sock" ];then
	  printf "MySQL is stopped ... \n"
	  exit
	else
	  printf "Stopping MySQL ... \n"
	  ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /mysql_multi_case/${port}/mysql.sock shutdown
	fi
}

#restart function
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_multi_case/${port}/mysql {start|stop|restart} \n"
esac

  說明:以上腳本最核心的就是兩個命令,第一個就是mysqld_safe --defaults-file指定默認配置文件來啓動數據庫,第二個命令就是mysqladmin 指定用戶名和密碼 同時指定mysql.sock文件 shutdown 來關閉mysql對應的實例,restart 的思想就是先調用stop函數,在調用start函數。3307和3308的啓動腳本和以上同樣的,惟一的區別是端口不一樣。函數

4.寫好了配置文件和啓動腳本後,接下來是對目錄結構受權,以及給腳本加可執行權限測試

chown -R mysql:mysql /mysql_multi_case                                   ####更改整個目錄屬組屬主
find /mysql_multi_case/ -type f -name 'mysql'|xargs chmod +x                     ####對全部實例的啓動腳本增長可執行權限

5.初始化數據庫ui

cd /application/mysql/scripts
./mysql_install_db --basedir=/application/mysql/ --datadir=/mysql_multi_case/3306/data --user=mysql

  說明:數據庫的初始化就是執行咱們單實例程序的scripts目錄裏的mysql_install_db腳本,指定basedir 和datadir 還有用戶,來初始化數據庫,執行以上初始化腳本後 若是返回

Installing MySQL system tables...
OK
Filling help tables...
OK

 說明:返回兩個OK 那麼就表示數據文件已經初始化完成,其實初始化的做用就是導入基本的數據庫表格文件呀,系統表呀等,咱們能夠進到咱們初始化指定的data目錄裏看,多了許多文件。 

6.啓動每一個多實例服務

/mysql_multi_case/3306/mysql start
/mysql_multi_case/3307/mysql start
/mysql_multi_case/3308/mysql start

  說明:啓動服務就是調用咱們以前寫啓動腳本。

檢查服務是否啓動起來

ss -lnt|egrep "3306|3307|3308"

  說明:若是可以檢查到330六、330七、3308這些端口 那麼表示服務已經正常運行。

接下來是咱們給數據庫設置登陸密碼,默認狀況root是空密碼

mysqladmin -uroot password admin -S /mysql_multi_case/3306/mysql.sock
mysqladmin -uroot password admin -S /mysql_multi_case/3307/mysql.sock
mysqladmin -uroot password admin -S /mysql_multi_case/3308/mysql.sock

  說明:本人是測試環境全部用的是弱密碼,正式環境不建議。以上命令的意思就是給root用戶設置密碼成admin(這是初始化root密碼爲空的狀況),值得注意的是 多實例必定要指定mysql的sock文件,mysqladmin -uroot -padmin password adminn123 -S /mysql_multi_case/3306/mysql.sock這種狀況就是給root用戶更改密碼,其實這些命令不用去記,咱們初始化兩個ok的界面,系統會告訴咱們。

6.設置開機啓動

echo "/mysql_multi_case/3306/mysql start" >>/etc/rc.local
echo "/mysql_multi_case/3307/mysql start" >>/etc/rc.local
echo "/mysql_multi_case/3308/mysql start" >>/etc/rc.local

7.登陸mysql 

7.1本地登陸

mysql -uroot -padmin -S /mysql_multi_case/3306/mysql.sock

7.2遠程登陸

mysql -uroot -padmin -h 192.168.11.107 -P 11319 -S /mysql_multi_case/3306/mysql.sock

  說明:多實例的登陸和單實例不一樣,多實例須要指定不一樣的mysql.sock文件來登陸對應的mysql實例,本地登陸不須要指定主機和端口,遠程登陸須要指定主機地址和端口,注意指定端口是-P(大寫) -p(小寫)是指定密碼字符串 -S是指定mysql.sock文件。

關於遠程用戶受權請參考http://www.javashuo.com/article/p-tgcxrxmu-km.html

相關文章
相關標籤/搜索