mysql5.5多實例安裝

  最近mysql數據庫遇到了幾個問題:

  • 由於多個應用使用的是同一個數據庫實例,當其中一個應用由於sql問題卡死的時候,導致其他應用也被連累的宕機了

  • 公司有多個產品,其中一個產品的數據庫要求大小寫不區分,但是如果給他不區分之後,其他應用的數據庫是要求必須區分的

  • 某產品是公司的主打產品,它使用了4個數據庫,都放在一個實例下,但是有一個數據庫是用來保存接口訪問日誌的,並且後臺會對這些數據進行分析,平時運行的還正常。突然有一天,直接卡死了,導致這個應用無法登陸,無法訪問了。後來分析原因,有個sql無法命中索引,導致數據庫卡死!


   由於經驗的缺乏,導致了以上各種問題的發生,後來考慮到這臺服務器資源還很充足,就考慮用多實例解決這個問題。以下是我搭建多實例的過程。


操作系統:centos6.5 64位

mysql版本:mysql-5.5.42


  1. 使用yum安裝一些依賴包

yum -y install gcc gcc-c++ zlib*  ncurses-devel libmcrypt* libtool-ltdl-devel*  openssl pcre* telnet sysstat mlocate bison cmake


創建mysql用戶,以及創建多實例需要的目錄
groupadd mysql
useradd -g mysql mysql
mkdir -p /data/3307mysql/{server,data}
mkdir -p /data/3308mysql/{server,data}
mkdir -p /data/3309mysql/{server,data}
修改mysql數據目錄的權限,以保證mysql正常啓動
chown -R mysql.mysql /data/3307mysql
chown -R mysql.mysql /data/3308mysql
chown -R mysql.mysql /data/3309mysql
編譯安裝mysql
cd /usr/src
tar -zxvf mysql-5.5.42.tar.gz 
cd mysql-5.5.42
cmake . -DCMAKE_INSTALL_PREFIX=/data/3309mysql/server -DMYSQL_DATADIR=/data/3309mysql/data -DMYSQL_UNIX_ADDR=/data/3309mysql/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_TCP_PORT=3309 -DEXTRA_CHARSETS=all \-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  -DMYSQL_USER=mysql -DWITH_DEBUG=1
make
make install
cmake . -DCMAKE_INSTALL_PREFIX=/data/3308mysql/server -DMYSQL_DATADIR=/data/3308mysql/data -DMYSQL_UNIX_ADDR=/data/3308mysql/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_TCP_PORT=3308 -DEXTRA_CHARSETS=all \-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  -DMYSQL_USER=mysql -DWITH_DEBUG=1
make
make install
cmake . -DCMAKE_INSTALL_PREFIX=/data/3307mysql/server -DMYSQL_DATADIR=/data/3307mysql/data -DMYSQL_UNIX_ADDR=/data/3307mysql/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_TCP_PORT=3307 -DEXTRA_CHARSETS=all \-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  -DMYSQL_USER=mysql -DWITH_DEBUG=1
make
make install
複製my.cnf到指定的位置
cd /data/3307mysql/server
cp support-files/my-innodb-heavy-4G.cnf ./my.cnf
cd /data/3308mysql/server
cp support-files/my-innodb-heavy-4G.cnf ./my.cnf
cd /data/3309mysql/server
cp support-files/my-innodb-heavy-4G.cnf ./my.cnf
準備各個實例的啓動腳本
#3307數據庫啓動腳本
#!/bin/bash
#author:sqw 2015年6月5日
mysql_port=3307
mysql_username="root"
mysql_password="123qwe"
mysql_safe="/data/3307mysql/server/bin/mysqld_safe"
mysql_cnf="/data/3307mysql/server/my.cnf"
mysql_sock="/data/3307mysql/mysql.sock"
function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh ${mysql_safe} --defaults-file=${mysql_cnf} 2>&1 > /dev/null &
printf "Starting MySQL...success!\n"
}
function_stop_mysql()
{
printf "Stoping MySQL...\n"
/data/3307mysql/server/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S ${mysql_sock} shutdown 2>/dev/null
printf "Stoping MySQL...success!\n"
}
function_kill_mysql()
{
kill -9 $(ps -ef | grep '3307mysql/server' |grep -v grep| grep -v mysqld_safe|  awk '{print $2}')
kill -9 $(ps -ef | grep '3307mysql/server' |grep -v grep|  awk '{print $2}')
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/3307mysql/my3307.sh {start|stop|restart|kill}
------start    啓動
------stop     停止
------restart  重啓
------kill     強制殺掉進程
";;
esac


#mysql3308啓動腳本
#!/bin/bash
#author:sqw 2015年6月5日
mysql_port=3308
mysql_username="root"
mysql_password="123qwe"
mysql_safe="/data/3308mysql/server/bin/mysqld_safe"
mysql_cnf="/data/3308mysql/server/my.cnf"
mysql_sock="/data/3308mysql/mysql.sock"
function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh ${mysql_safe} --defaults-file=${mysql_cnf} 2>&1 > /dev/null &
printf "Starting MySQL...success!\n"
}
function_stop_mysql()
{
printf "Stoping MySQL...\n"
/data/3308mysql/server/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S ${mysql_sock} shutdown 2>/dev/null
printf "Stoping MySQL...success!\n"
}
function_kill_mysql()
{
kill -9 $(ps -ef | grep '3308mysql/server' |grep -v grep| grep -v mysqld_safe|  awk '{print $2}')
kill -9 $(ps -ef | grep '3308mysql/server' |grep -v grep|  awk '{print $2}')
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/3308mysql/my3308.sh {start|stop|restart|kill}
------start    啓動
------stop     停止
------restart  重啓
------kill     強制殺掉進程
";;
esac


#mysql3309數據庫啓動腳本
#!/bin/bash
#author:sqw 2015年6月5日
mysql_port=3309
mysql_username="root"
mysql_password="123qwe"
mysql_safe="/data/3309mysql/server/bin/mysqld_safe"
mysql_cnf="/data/3309mysql/server/my.cnf"
mysql_sock="/data/3309mysql/mysql.sock"
function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh ${mysql_safe} --defaults-file=${mysql_cnf} 2>&1 > /dev/null &
printf "Starting MySQL...success!\n"
}
function_stop_mysql()
{
printf "Stoping MySQL...\n"
/data/3309mysql/server/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S ${mysql_sock} shutdown 2>/dev/null
printf "Stoping MySQL...success!\n"
}
function_kill_mysql()
{
kill -9 $(ps -ef | grep '3309mysql/server' |grep -v grep| grep -v mysqld_safe|  awk '{print $2}')
kill -9 $(ps -ef | grep '3309mysql/server' |grep -v grep|  awk '{print $2}')
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/3309mysql/my3309.sh {start|stop|restart|kill}
------start    啓動
------stop     停止
------restart  重啓
------kill     強制殺掉進程
";;
esac
初始化各個實例
cd /data/3309mysql/server
bash scripts/mysql_install_db --user=mysql --basedir=/data/3309mysql/server --datadir=/data/3309mysql/data

cd /data/3308mysql/server
bash scripts/mysql_install_db --user=mysql --basedir=/data/3308mysql/server --datadir=/data/3308mysql/data

cd /data/3307mysql/server
bash scripts/mysql_install_db --user=mysql --basedir=/data/3307mysql/server --datadir=/data/3307mysql/data
修改各個數據庫實例的root密碼
bash /data/3307mysql/my3307.sh start
bash /data/3308mysql/my3308.sh start
bash /data/3309mysql/my3309.sh start

/data/3307mysql/server/bin/mysqladmin -u root -S /data/3307mysql/mysqld.sock password '123qwe'
/data/3307mysql/server/bin/mysqladmin -u root -S /data/3308mysql/mysqld.sock password '123qwe'
/data/3307mysql/server/bin/mysqladmin -u root -S /data/3309mysql/mysqld.sock password '123qwe'
登錄各個實例查看是否可以正常使用
mysql -uroot -p123qwe -S /data/3307mysql/mysqld.sock
mysql -uroot -p123qwe -S /data/3308mysql/mysqld.sock
mysql -uroot -p123qwe -S /data/3309mysql/mysqld.sock

  

  

OK,到此爲止,3307,3308,3309這三個實例已經建立完成,可以把哪些需要分割的數據庫單獨轉移過來了。

不過,還有幾個問題需要注意:

1、登錄的時候請注意加參數

-S /data/3307mysql/mysqld.sock

選對對應的sock文件,才能正常登錄到對應的實例中

2、使用mysql命令往對應的實例中導入數據的時候,也需要加入這個參數,否則,就導入到默認的第一個實例裏面了

  

  

最後,作爲一個菜鳥,請各位大俠多多批評指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章