CleverCode最近在研究mysql的多實例,發現有兩種方式:
第一種是使用多個配置文件啟動不同的進程來實現多實例。這種方式的優勢邏輯簡單,配置簡單,缺點是管理起來不太方便。
第二種是通過官方自帶的mysqld_multi。使用單獨的配置文件來實現多實例,這種方式定制每個實例的配置不太方面,優點是管理起來很方便,集中管理。
推薦使用多個配置文件方式。這種實際應用中好,耦合性不強,配置方便,特別是主從復制的時候。
這里分兩次介紹,先介紹多個配置文件方式。
1 環境介紹:
1)簡介
mysql 版本:mysql-5.5.27
cmake:cmake-2.8.8
操作系統:CentOS6.5
mysql實例數:3個
實例占用端口分別為:3306、3307、3308
2)本次安裝所有的軟件資源包下載地址
http://download.csdn.net/detail/clevercode/8662323
2 配置防火墻
1) 在防火墻配置文件中添加3306,3307,3308(允許3306,3307,3308端口通過防火墻)?
~~~
?# vi /etc/sysconfig/iptables ? #編輯防火墻配置文件?
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3307 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3308 -j ACCEPT
~~~
2)重啟防火墻
`?# /etc/init.d/iptables restart ?#最后重啟防火墻使配置生效 `
3 安裝cmake
解壓
~~~
?# cd /usr/local/src/mysql
?# tar zxvf cmake-2.8.8.tar.gz
?# cd cmake-2.8.8
~~~
配置
`?# ./configure `
編譯
`?# make `
安裝
`?# make install `
查看版本
`?# cmake -version `
4 安裝Mysql
1) 創建用戶
~~~
?# groupadd mysql ?#添加mysql組 ? ?
?# useradd -g mysql mysql -s /bin/false ?#創建用戶mysql并加入到mysql組,不允許mysql用戶直接登錄系統
~~~
2) 解壓
~~~
?# cd /usr/local/src/mysql
?# tar zxvf mysql-5.5.27.tar.gz
?# cd mysql-5.5.27
~~~
4) 配置
`?# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql? `
PS: cmake的時候,參數可以不用那么多,只要一個-DCMAKE_INSTALL_PREFIX=/usr/local/mysql就行了,我們可以在 my.cnf里面配置。[mysqld]中的內容,看看你copy后的my.cnf有沒有這些設置,有就不用了在設置了。 ?
5)編譯
`?# make `
6)安裝
`?# make install `
5 初始化數據庫
~~~
?# mkdir -p /data0/dbdata/mysql/3306
?# mkdir -p /data0/dbdata/mysql/3307
?# mkdir -p /data0/dbdata/mysql/3308
?# chown -R mysql:mysql /data0/dbdata/mysql/3306
?# chown -R mysql:mysql /data0/dbdata/mysql/3307
?# chown -R mysql:mysql /data0/dbdata/mysql/3308
?# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data0/dbdata/mysql/3306 --user=mysql
?# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data0/dbdata/mysql/3307 --user=mysql
?# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data0/dbdata/mysql/3308 --user=mysql
~~~
6 修改配置文件
~~~
?# cp /usr/local/mysql/support-files/my-huge.cnf /data0/dbdata/mysql/3306/my.cnf
?# cp /usr/local/mysql/support-files/my-huge.cnf /data0/dbdata/mysql/3307/my.cnf
?# cp /usr/local/mysql/support-files/my-huge.cnf /data0/dbdata/mysql/3308/my.cnf
?# vi /data0/dbdata/mysql/3308/my.cnf ? ?#編輯配置文件(3306,3307同理)
?#在 [client]部分修改一下數據
port= 3308
socket= /tmp/mysql3308.sock
?#在 [mysqld] 部分修改數據
port= 3308
socket= /tmp/mysql3308.sock
datadir = /data0/dbdata/mysql/3308 ?#添加MySQL數據庫路徑?
:wq! ?#保存退出?
~~~
7 創建自動啟動文件?
~~~
?# cp /usr/local/mysql/support-files/mysql.server ?/etc/rc.d/init.d/mysqld3306
?# cp /usr/local/mysql/support-files/mysql.server ?/etc/rc.d/init.d/mysqld3307
?# cp /usr/local/mysql/support-files/mysql.server ?/etc/rc.d/init.d/mysqld3308
?# chmod 755 /etc/rc.d/init.d/mysqld3306
?# chmod 755 /etc/rc.d/init.d/mysqld3307
?# chmod 755 /etc/rc.d/init.d/mysqld3308
?# vi /etc/rc.d/init.d/mysqld3308 ?#編輯 (3306,3307同理) ??
basedir=/usr/local/mysql ? #MySQL程序安裝路徑 ? ?
datadir=/data0/dbdata/mysql/3308 ?#MySQl數據庫存放目錄?
~~~
修改
~~~
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
~~~
變成
~~~
$bindir/mysqld_safe --defaults-file="$datadir/my.cnf" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
~~~
8 啟動3306、3307、3308的mysql?
~~~
?# service mysqld3306 restart
?# service mysqld3307 restart
?# service mysqld3308 restart
~~~
9 查看端口是否監聽,如果出現3306,3307,3308則啟動正常
~~~
?# netstat -anp | grep 3308
tcp ? ? ? ?0 ? ? ?0 0.0.0.0:3308 ? ? ? ? ? ? ? ?0.0.0.0:* ? ? ? ? ? ? ? ? ? LISTEN ? ? ?2348/mysqld ? ? ? ??
unix ?2 ? ? ?[ ACC ] ? ? STREAM ? ? LISTENING ? ? 10780 ?2348/mysqld ? ? ? ? /tmp/mysql3308.sock ?
~~~
10 初始化密碼并且授權遠程登錄(3306,3307同理)
~~~
?# /usr/local/mysql/bin/mysqladmin -u root password "pwd3308" -S /tmp/mysql3308.sock
?# /usr/local/mysql/bin/mysql -uroot -ppwd3308 -S ?/tmp/mysql3308.sock
mysql> grant all privileges on ?*.* to 'root'@'%' identified by 'pwd3308' with grant option;
mysql> flush privileges;
~~~