使用者工具

網站工具


database:mysql:multiple

方法一

修改/etc/init.d/mysql 啟動檔案及/etc/my.cnf mysql 組態設定檔。

  1. 建立第二個執行個體資料儲存的目錄
    #mkdir -p /var/lib/mysql3307
  2. 修改該執行個體的權限
    chown mysql:mysql /var/lib/mysql3307/
  3. 修改mysql設定檔,通常只要增加或修改 port,datadir,socket在這個區段[mysqld]
    cp -p /etc/my.cnf /etc/my3307.cnf
    vim /etc/my3307.cnf
    ~略~
    port            = 3307
    datadir         = /var/lib/mysql3307/
    socket          = /var/lib/mysql3307/mysql.sock
    ~略~
  4. 修改重要的啟動檔。本範例的啟動檔是截取Mysql-5.6.x版本/etc/init.d/mysql
    cp -p /etc/init.d/mysql  

    或若是原本不是Mysql-5.6.x的版本,可以到Mysql官網下載,並擷取其設定檔

    #mkdir /tmp/test;cd /tmp/test/;rpm2cpio MySQL-server-5.6.x|cpio -idvc
    #ls -l /tmp/test/etc/init.d/mysql
    #cp -p /tmp/test/etc/init.d/mysql  /etc/init.d/mysql3307
    • 約在138列位置後面插入port 相關參數
      --port=*)     port=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
    • 約在215列位置修改設定檔路徑,換成/etc/my3307.cnf
      conf=/etc/my3307.cnf
    • 約在257列位置增加 -c /etc/my3307.cnf 相關參數
      parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server -c /etc/my3307.cnf`
    • 約在284列位置增加 –port=“$port” , –socket=“$datadir”/mysq.sock相關參數
      $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --port="$port" --socket="$datadir"/mysq.sock  $other_args >/dev/null 2>&1 &
  5. 為/var/lib/mysql3307/安裝預設mysql資料庫
    mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf  --datadir=/var/lib/mysql3307/
  6. 啟動mysql3307 試試看
    /etc/init.d/mysql3307 start
    Starting MySQL.. SUCCESS!
  7. 連接Mysql3307試試看。因為多個執行個體(multiple instances)通常是以port ,及socket來區分,因此mysql client在連接時,要指定 port及socket參數
    mysql -uroot -P3307 -p  -h127.0.0.1 -S /var/lib/mysql3307/
    -u 帳號 , -h 連接該資料庫的IP或hostname , -S socket位置 , -P port Number,-p 密碼

方法二 利用mysqld_multi工具

方法一是多個設定檔及多個執行檔方式,來建立多個執行個體,像是

/etc/init.d/mysql3307 -> /etc/my3307.cnf
/etc/init.d/mysql3306 -> /etc/my3306.cnf

但是,每次修改增加或修改設定檔是很麻煩,因此貼心的Mysql 便設計出mysqld_multi工具,只要單一啟動檔及單依設定檔就可以產生多個執行個體

  1. 建立兩個執行個體資料儲存的目錄 /mydqn /mydb2
    #mkdir /mydb;mkdir /mydb2
  2. 修改該執行個體的權限
    chown mysql:mysql /mydb;chown mysql:mysql /mydb2
  3. 為 /mydb , /mydb2 建立 mysql DB 基本資料
    mysql_install_db --user=mysql --defaults-file=/etc/my2.cnf  --datadir=/mydb/
    mysql_install_db --user=mysql --defaults-file=/etc/my2.cnf  --datadir=/mydb2/
  4. 除了原有/etc/my.cnf以外,也可配置另一個設定檔/etc/my2.cnf
    [mysqld_multi]
    mysqld     =  /usr/bin/mysqld_safe
    mysqladmin =  /usr/bin/mysqladmin
    #user = root
    #password = qwedcxza
    
    [mysqld3308]
    
    # GENERAL #
    user                           = mysql
    default_storage_engine         = InnoDB
    port                           = 3308
    socket                         = /mydb/mysql3308.sock
    pid_file                       = /mydb/mysql3308.pid
    
    # MyISAM #
    key_buffer_size                = 16M
    myisam_recover                 = FORCE,BACKUP
    
    # SAFETY #
    max_allowed_packet             = 16M
    max_connect_errors             = 1000000
    skip_name_resolve
    innodb                         = FORCE
    
    # DATA STORAGE #
    datadir                        = /mydb/
    
    [mysqld3309]
    
    # GENERAL #
    user                           = mysql
    default_storage_engine         = InnoDB
    port                           = 3309
    socket                         = /mydb/mysql3309.sock
    pid_file                       = /mydb/mysql3309.pid
    
    # MyISAM #
    key_buffer_size                = 16M
    myisam_recover                 = FORCE,BACKUP
    
    # SAFETY #
    max_allowed_packet             = 16M
    max_connect_errors             = 1000000
    skip_name_resolve
    innodb                         = FORCE
    
    # DATA STORAGE #
    datadir                        = /mydb2/
  5. 啟動 屬於/mydb 及 port=3308 ,/mydb/mysql3308.sock
    mysqld_multi --defaults-file=/etc/my2.cnf  start 3308
  6. 啟動 屬於/mydb2 及 port=3309 ,/mydb/mysql3309.sock
    mysqld_multi --defaults-file=/etc/my2.cnf  start 3309
  7. 測試。 port=3308 ,socket=/mydb/mysql3308.sock 登入資料庫
    mysql -uroot  -P3308 -p -S /mydb/mysql3308.sock  mysql -e "show tables"
  8. 測試 。 port=3309 ,socket=/mydb/mysql3309.sock 登入資料庫
    mysql -uroot  -P3309 -p -S /mydb/mysql3309.sock  mysql -e "show tables"

參考資料

database/mysql/multiple.txt · 上一次變更: 2013/11/24 21:52 (外部編輯)