mysql多實例安裝---分別定義不同的配置文件

?

1.安裝MySQL需要的依賴包

[root@MySQL ~]# yum install ncurses-devel libaio-devel cmake -y

[root@MySQL ~]# rpm -qa ncurses-devel libaio-devel

ncurses-devel-5.7-4.20090207.el6.x86_64

libaio-devel-0.3.107-10.el6.x86_64



2.安裝編譯MySQl需要的軟件(通過wget下載,或者本地電腦上傳到linux里,這里用wget下載)

wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.32.tar.gz

wget http://www.cmake.org/files/v2.8/cmake-2.8.8.tar.gz


yum install lrzsz -y #需要安裝lrzsz

rz -y ?#上傳包 ? ?sz -y #下載到本地


[root@MySQL ~]# useradd olodboy

[root@MySQL ~]# cd /home/oldboy/

[root@MySQL ~]# mkdir /tools

[root@MySQL ~]# cd /tools/


[root@MySQL tools]# rz -y

分別上傳cmake-2.8.8.tar.gz和mysql-5.5.32.tar.gz

查看檢查

[root@MySQL tools]# ls -lh

total 29M

-rw-r--r--. 1 root root 5.5M Sep ?1 ?2016 cmake-2.8.8.tar.gz

-rw-r--r--. 1 root root ?24M Sep ?1 ?2016 mysql-5.5.32.tar.gz


[root@MySQL tools]# tar xf cmake-2.8.8.tar.gz

[root@MySQL tools]# cd cmake-2.8.8

[root@MySQL cmake-2.8.8]# ./configure ?#無需加任何參數

[root@MySQL cmake-2.8.8]# gmake

[root@MySQL cmake-2.8.8]# gmake install

[root@MySQL cmake-2.8.8]# cd ..


開始安裝MySQL

創建用戶和組

[root@MySQL tools]# useradd mysql -s /sbin/nologin -M

檢查

[root@MySQL tools]# id mysql

uid=501(mysql) gid=501(mysql) groups=501(mysql)

[root@MySQL tools]# tar xf mysql-5.5.32.tar.gz

[root@MySQL tools]# cd mysql-5.5.32

[root@MySQL mysql-5.5.32]# cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \

-DMYSQL_DATADIR=/application/mysql-5.5.32/data \

-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \

-DENABLED_LOCAL_INFILE=ON \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_FEDERATED_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \

-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \

-DWITH_FAST_MUTEXES=1 \

-DWITH_ZLIB=bundled \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_READLINE=1 \

-DWITH_EMBEDDED_SERVER=1 \

-DWITH_DEBUG=0

[root@MySQL mysql-5.5.32]# make && make install

[root@MySQL mysql-5.5.32]# ln -s /application/mysql-5.5.32/ /application/mysql


檢查

[root@MySQL mysql-5.5.32]# ls /application/ -l

total 4

lrwxrwxrwx. ?1 root root ? 26 Aug 30 01:36 mysql -> /application/mysql-5.5.32/

drwxr-xr-x. 13 root root 4096 Aug 30 01:17 mysql-5.5.32


這里以3306,3307兩個實例為例,創建相關mysql多實例的目錄如下:

[root@MySQL mysql-5.5.32]# yum install tree dos2unix nmap -y ? ?#安裝tree

[root@MySQL mysql-5.5.32]# mkdir -p /data/{3306,3307}/data

[root@MySQL mysql-5.5.32]# tree /data

/data

├── 3306 ? ? ? ?#3306實例的目錄

│?? └── data ? #3306實例的數據文件目錄

├── 3307 ? ? ? ?#3307實例的目錄

│?? └── data ? #3307實例的數據文件目錄

└── oldboy.txt


4 directories, 1 file


提示:

1.mkdir -p /data/{3306,3307}/data相當于mkdir -p /data/3306/data; mkdir -p /data/3307/data


創建MySQL多實例的配置文件

? ? MySQL數據庫默認為用戶提供了多個配置文件模板,用戶可以根據服務器大小來選擇

[root@MySQL mysql-5.5.32]# ls -l support-files/my*cnf

上面是單實例的配置過程的默認配置文件模板,我們這里配置多實例和單實例相同了,我們為了讓MySQL多實例之間彼此獨立,因此,我們為每一個實例建立一個配置文件和一個啟動文件mysql,分別對應自己的數據文件data。

我們可以通過vi命令來添加配置文件的內容,如下:

vi /data/3306/my.cnf

vi /data/3307/my.cnf


[root@MySQL mysql-5.5.32]# cd /

上傳data.zip

[root@MySQL /]# rz -y?

解壓data.zip

[root@MySQL /]# unzip data.zip

[root@centos1 /]# tree /data

/data

|-- 3306

| ? |-- data

| ? |-- my.cnf

| ? `-- mysql

|-- 3307

| ? |-- data

| ? |-- my.cnf

| ? `-- mysql

`-- oldboy.txt


4 directories, 5 files


特別說明

本文多實例啟動文件的啟動mysql服務實質命令:

mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 /dev/null &

mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 /dev/null &


本文多實例啟動文件的停止mysql服務實質命令:

mysqladmin -u root -poldboy -S /data/3306/mysql.sock shutdown

mysqladmin -u root -poldboy -S /data/3307/mysql.sock shutdown



[root@MySQL /]# chown -R mysql.mysql /data

[root@MySQL /]# find /data -type f -name "my.cnf"

/data/3306/my.cnf

/data/3307/my.cnf

[root@MySQL /]# find /data -type f -name "my.cnf"|xargs ls -l

-rw-r--r--. 1 mysql mysql 1899 Oct 29 ?2013 /data/3306/my.cnf

-rw-r--r--. 1 mysql mysql 1901 Oct 29 ?2013 /data/3307/my.cnf


[root@MySQL /]# find /data -type f -name "mysql"|xargs ls -l

-rw-r--r--. 1 mysql mysql 1307 Jul 15 ?2013 /data/3306/mysql

-rw-r--r--. 1 mysql mysql 1307 Jul 21 ?2013 /data/3307/mysql


[root@MySQL /]# find /data -type f -name "mysql"|xargs chmod 700

[root@MySQL /]# find /data -type f -name "mysql"|xargs ls -l

-rwx------. 1 mysql mysql 1307 Jul 15 ?2013 /data/3306/mysql

-rwx------. 1 mysql mysql 1307 Jul 21 ?2013 /data/3307/mysql


[root@MySQL /]# ls -l /application/mysql/bin/mysql

-rwxr-xr-x. 1 root root 5345508 Aug 21 22:52 /application/mysql/bin/mysql

[root@MySQL /]# ls ?/application/mysql/bin


[root@MySQL /]# echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile ? #注意,echo后是單引號,雙引號是不行的

[root@MySQL /]# tail -l etc/profile?

export PATH=/application/mysql/bin:$PATH

[root@MySQL /]# source /etc/profile

執行source使上一行添加到/etc/profile中內容直接生效

以上命令的用途為,定義mysql全局路徑,實現在任意路徑執行mysql命令

[root@MySQL /]# echo $PATH

/application/mysql/bin:/application/mysql/bin:/application/mysql/bin:/application/mysql/bin:/application/mysql/bin:/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

執行echo $PATH有/application/mysql/bin輸出表示配置成功


#提示:也可以用這條命令做軟鏈接

[root@MySQL /]# ln -s /application/mysql/bin/* /usr/local/sbin/ ?

[root@MySQL /]# ls -l /usr/local/sbin/mysql*


[root@MySQL /]# which mysql

/usr/local/sbin/mysql

檢查

[root@MySQL /]# ls -l `which mysql`?

lrwxrwxrwx. 1 root root 28 Jul 22 12:56 /usr/local/sbin/mysql -> /application/mysql/bin/mysql

[root@MySQL /]# type `which mysql`

/usr/local/sbin/mysql is /usr/local/sbin/mysql


[root@MySQL /]# cd /application/mysql/scripts/

[root@MySQL scripts]# ls

mysql_install_db


初始化mysql 3306實例

[root@MySQL scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data/ --user=mysql

看到兩個OK代表初始化成功


初始化mysql 3307實例

[root@MySQL scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql


[root@MySQL scripts]# /data/3306/mysql start

Starting MySQL...

[root@MySQL scripts]# /data/3307/mysql start ? ? ? ? ? ? ? ? ? ? ??

Starting MySQL...

檢查端口

[root@MySQL scripts]# netstat -lntup|grep 330

tcp ? ? ? ?0 ? ? ?0 0.0.0.0:3306 ? ? ? ? ? ? ? ?0.0.0.0:* ? ? ? ? ? ? ? ? ? LISTEN ? ? ?30768/mysqld ? ? ? ?

tcp ? ? ? ?0 ? ? ?0 0.0.0.0:3307 ? ? ? ? ? ? ? ?0.0.0.0:* ? ? ? ? ? ? ? ? ? LISTEN ? ? ?31494/mysqld?


登錄mysql實例 3306,-S /data/3306/mysql.sock 用于區別登錄不同實例

[root@MySQL scripts]# mysql -S /data/3306/mysql.sock

[root@MySQL scripts]# mysql -S /data/3307/mysql.sock


重啟對應的實例數據庫

/data/3306/mysql stop

/data/3307/mysql start


設置mysql不同實例登錄密碼

[root@MySQL scripts]# mysqladmin -uroot password oldboy123 -S /data/3306/mysql.sock

[root@MySQL scripts]# mysqladmin -uroot password oldboy456 -S /data/3307/mysql.sock


帶密碼登錄不同實例數據庫方法

mysql -uroot -poldboy456 -S /data/3307/mysql.sock

mysql -uroot -poldboy123 -S /data/3306/mysql.sock


[root@MySQL scripts]# sed -i '13 s#oldboy#oldboy123#g' /data/3306/mysql

[root@MySQL scripts]# sed -n '13p' /data/3306/mysql

mysql_pwd="oldboy123"

[root@MySQL scripts]# sed -i '13 s#oldboy#oldboy456#g' /data/3307/mysql ??

[root@MySQL scripts]# sed -n '13p' /data/3307/mysql ? ? ? ? ? ? ? ? ? ?

mysql_pwd="oldboy456"


[root@MySQL scripts]# /data/3306/mysql stop

Stoping MySQL...

[root@MySQL scripts]# /data/3307/mysql stop?

Stoping MySQL...

[root@MySQL scripts]# ss -lntup|grep 3307

[root@MySQL scripts]# ss -lntup|grep 3306

[root@MySQL scripts]# /data/3306/mysql start

Starting MySQL...

[root@MySQL scripts]# /data/3307/mysql start?

Starting MySQL...

[root@MySQL scripts]# ss -lntup|grep 3306 ??

tcp ? ?LISTEN ? ? 0 ? ? ?128 ? ? ? ? ? ? ? ? ? ?*:3306 ? ? ? ? ? ? ? ? ?*:* ? ? ?users:(("mysqld",32625,12))

[root@MySQL scripts]# ss -lntup|grep 3307

tcp ? ?LISTEN ? ? 0 ? ? ?128 ? ? ? ? ? ? ? ? ? ?*:3307 ? ? ? ? ? ? ? ? ?*:* ? ? ?users:(("mysqld",33343,11))

[root@MySQL scripts]# ss -lntup|grep 330

tcp ? ?LISTEN ? ? 0 ? ? ?128 ? ? ? ? ? ? ? ? ? ?*:3306 ? ? ? ? ? ? ? ? ?*:* ? ? ?users:(("mysqld",32625,12))

tcp ? ?LISTEN ? ? 0 ? ? ?128 ? ? ? ? ? ? ? ? ? ?*:3307 ? ? ? ? ? ? ? ? ?*:* ? ? ?users:(("mysqld",33343,11))


下面增加一個MySQL 3308端口實例的命令集合如下:

mkdir -p /data/3308/data

\cp /data/3306/my.cnf /data/3308/

\cp /data/3306/mysql /data/3308/

sed -i 's/3306/3308/g' /data/3308/my.cnf

sed -i 's/server-id=1/server-id=8/g' /data/3308/my.cnf

sed -i 's/3306/3308/g' /data/3308/mysql

chown -R mysql:mysql /data/3308

chmod 700 /data/3308/mysql

cd /application/mysql/scripts

./mysql_install_db ?--datadir=/data/3308/data/ --basedir=/application/mysql/ --user=mysql

chown -R mysql:mysql /data/3308

/data/3308/mysql start

sleep 5

netstat -lnt|grep 3308


登錄mysql實例3308

[root@MySQL scripts]# mysql -S /data/3308/mysql.sock



關于多實例MySQL登錄問題小結

1、多實例本地登錄MySQL

多實例本地登錄一般通過socket文件來指定具體登錄到那個實例,此文件具體位置是在mysql編譯過程或者my.cnf文件里指定的。在本地登錄數據庫時,登錄程序通過socket文件來判斷登錄的是那個數據庫實例

2、遠程連接登錄MySQL多實例

遠程登錄MySQl多實例其中的一個實例,通過TCP端口(port)來指定所要登錄的MySQL實例,此端口的配置是在mysql配置文件my.cnf中指定的

端口 port 例如:mysql -uoldboy -p'oldboy' -h 192.168.10.129 -P 3307 ?#-P為端口參數