萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> Mysql 多實例啟動配置詳解

Mysql 多實例啟動配置詳解

多實例啟動是我在幫一朋友配置環境衛生時希望同一時間啟動多個mysqld進程,下面我來給各位同學介紹一下操作配置方法。

當開發與生產環境在同一台機器上,或需要在一台機器上部署多套測試環境時,往往需要同時起多個mysqld進程,最近幫測試搭環境的時候就碰到了這樣的問題。

還是從安裝mysql開始,下載tarball安裝,

安裝mysql

 代碼如下 復制代碼 groupadd mysql
useradd -g mysql mysql
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.5.27/  -DMYSQL_DATADIR=/data/mysql  -DWITH_INNOBASE_STORAGE_ENGINE=1  -DMYSQL_TCP_PORT=3306  -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock -DWITH_DEBUG=0
make && make install
 

然後配置my.cnf,從support-files裡面拷貝一個my-medium.cnf到/etc/my.cnf,裡面mysqld配置段的內容基本是這個樣子

my.cnf配置

 代碼如下 復制代碼 [mysqld]
port            = 3306
socket          = /var/run/mysql/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

默認mysqld只啟動一個實例,既然我們的目的是啟動多個mysqld實例,需要使用mysqld_multi。它是一個perl腳本,在使用之前,需要給my.cnf加一些料。

my.cnf配置[增加mysqld_mutli]

 代碼如下 復制代碼

# mysqld_multi會讀取這個配置短的內容
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld
mysqladmin = /usr/local/mysql/bin/mysqladmin

# 第一個mysqld實例
[mysqld1]
port = 3306
socket = /var/run/mysql/mysql1.sock
datadir = /data/mysql1
general-log-file = /var/log/mysql/error.log
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log-bin=mysql-bin
binlog_format=mixed
server-id       = 1
user = mysql

# 第二個mysqld實例
[mysqld2]
port = 3307
socket = /var/run/mysql/mysql2.sock
datadir = /data/mysql2
general-log-file = /var/log/mysql/error.log
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log-bin=mysql-bin
binlog_format=mixed
server-id       = 1
user = mysql

然後依配置創建mysql運行時文件夾並用mysql_install_db腳本初始化系統庫

 代碼如下 復制代碼 mkdir -p /data/mysql1 /data/mysql2 /var/log/mysql /var/run/mysql
chgrp mysql /data/mysql* /var/log/mysql /var/run/mysql
chown mysql /data/mysql* /var/log/mysql /var/run/mysql
mysql_install_db --datadir=/data/mysql1 --user=mysql
mysql_install_db --datadir=/data/mysql2 --user=mysql
mysqld_multi start 1-2

 

最後一條命令其實已經將我們配置好的mysqld1和mysqld2啟動了,這時候在進程表中應該能看到兩個mysqld進程,試著用-P參數指定端口能分別訪問在/data/mysql1和/data/mysql2下面的兩個庫,兩者互不影響,正好能滿足測試的要求。當然需要配置更多的實例也是可以的。

額外收獲
這次配置過程中還遇到一些額外的問題,記下來備忘。

假如使用的是ubuntu(我目前的版本還是11.10),默認會安裝apparmor,這個軟件是一個詭異的存在,它就像一個暗戀者,一直默默限制軟件的訪問權限,然後又不被系統待見,以至於我根本不知道它的存在。其實它是一個白名單,在/etc/apparmor.d/中指定了/usr/sbin/mysqld對各文件的訪問權限,當我想將mysql的數據文件夾遷移到別的位置時,一直報這個錯誤
Can't create test file /data/mysql1/littleboy.lower-test

而令人費解的就是mysql對這些文件夾是有讀寫權限的,其實只需要編輯/etc/apparmor.d/usr.sbin.mysqld文件,依樣畫葫蘆地為文件夾加上rw權限就可以了

給mysql設置遠程訪問權限,只需要下面這條sql
1

 代碼如下 復制代碼  INSERT mysql.user ( `Host`, `User`, `Password` ) VALUES ( '%', 'root', PASSWORD('123456') );

 

其中最關鍵的就是那個'%',表示通過任意host均可以訪問到本機的mysql

給mysql設置密碼。

 代碼如下 復制代碼 mysqladmin -u root -h 127.0.0.1 password 123456

上面那種是在不登錄mysql的情況下修改密碼,還有兩種可以通過改表的方式。見MySQL設置密碼的三種方法

修改過密碼以後,mysqld_multi可能就不能通過默認配置來結束mysqld進程了,這時候需要在配置裡加上用戶名和密碼

 代碼如下 復制代碼

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = root
password = 123456

當然這樣可能會有一些安全隱患,因為my.cnf是可見的。假如是多人使用,可以將password這行去掉,每次操作mysqld_multi的時候,在後面加上--password=123456參數就行了

copyright © 萬盛學電腦網 all rights reserved