如何在同一台機器執行兩個mysql資料庫的程式?

這個需求是這樣子產生的:某一個客戶需要客製化my.cnf檔。但是my.cnf檔的設定又會一次套用到所有的客戶上。

我查詢的關鍵字是 running multiple mysql instances on one server

參考資料 ( 這個參考資料只能當參考,我實測之後,有許多細節不同。)

修改的步驟:
(1) mkdir /var/lib/mysql2
chown mysql.mysql /var/lib/mysql2

(2) cp /etc/my.cnf /etc/my2.cnf
修改/etc/my2.cnf 的內容:
datadir=/var/lib/mysql2
port=3307

(3) cp /etc/init.d/mysql /etc/init.d/mysql2
修改/etc/init.d/mysql2 的內容:

  • 有mysqld_safe的這一行必須特別修改:       $bindir/mysqld_safe –datadir="$datadir" –socket="/var/lib/mysql2/mysql.sock" –pid-file="$mysqld_pid_file_path" –port="3307″ $other_args >/dev/null 2>&1 &
  • 修改所有的my.cnf 這個字串成為 my2.cnf
  • 修改 datadir=/var/lib/mysql 為 datadir=/var/lib/mysql2
  • 修改 lock_file_path="$lockdir/mysql" 為 lock_file_path="$lockdir/mysql2″

(4) chkconfig –add mysql2

(5) 理論上,要用mysql_install_db的指令來安裝新的default mysql database
mysql_install_db –datadir=/var/lib/mysql2 –defaults-file=/etc/my2.cnf –user=mysql
但是,實際上,我這樣子做之後,還是有問題,所以我後來沒使用這個指令。我把/var/lib/mysql2 這個資料夾清空之後,

cp -a /var/lib/mysql/performance_schema /var/lib/mysql2
cp -a /var/lib/mysql/mysql /var/lib/mysql2

(6) service mysql2 start

(7) mysql -h127.0.0.1 -P3307
如果可以順利登入的話,
mysql> show databases;

理論上,如果是只出現
mysql
information_schema
performance_schema

三個資料庫的話,這樣子就代表設置成功了!

mysql忘記root password

遇到這種不幸的情況,最簡單的方式,當然是使用WHM的功能,就可以簡單地重新設定。

然而,有時候,因為成本的因素,我們把cpanel/WHM的成本省下來的時候,就得用比較複雜的技巧來處理這個問題:

1  service mysql stop

2 修改 /etc/init.d/mysql
找到 mysqld_safe 這一行,加上 –skip-grant-tables

3 service mysql start

4  現在可以不用密碼登入了。
mysql  -u root
use mysql;
update user set password=password(‘yournewpasswordhere’) where user=’root’;
flush privileges;
exit;

5 service mysql restart