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為端口參數
轉載于:https://blog.51cto.com/doublelinux/1957390