MySQL多執行個體配置(一),mysql執行個體配置

來源:互聯網
上載者:User

MySQL多執行個體配置(一),mysql執行個體配置

    MySQL資料庫的集中化營運,可以通過在一台MySQL資料庫伺服器上,部署多個MySQL執行個體。該功能是通過mysqld_multi來實現。mysqld_multi用於管理多個mysqld的服務進程,這些mysqld服務進程程式可以用不同的socket或是監聽於不同的連接埠,同時將資料檔案分布到不同的磁碟以分散IO。mysqld_multi提供簡單的命令用於啟動,關閉和報告所管理的伺服器的狀態。從而減少生產環境的維護成本,方便後續的遷移和清理等工作,藉助多執行個體綁定的方式提高伺服器的整體資源使用率。對於多執行個體的配置有2種方式,一種是在my.cnf為所有執行個體提供配置,一種是使用每一個執行個體一個設定檔。本文主要描述第一種方式。
   第二種多執行個體配置方式請參考:MySQL多執行個體配置(二)
   有關MySQL單一實例的安裝請參考:Linux 下MySQL源碼安裝完整版
  

1、各資料庫多執行個體的差異
  MSSQL
      MSSQL中的執行個體指的是一個SQL server伺服器上僅有一個預設執行個體。預設執行個體名即為機器名ServerName(或IP)。
      如果在同一台機器上再安裝SQL server,我們可以對執行個體命名如ServerName/InstanceName。
      即一台SQL server伺服器上可以存在多個不同的執行個體。一個執行個體下可以存在多個不同的資料庫。
      對於不同執行個體下的資料庫的訪問,使用ServerName/InstanceName:PortNo即可實現訪問,預設執行個體為ServerName:PortNo。
      對不同的執行個體配置IP地址,相關的訪問協議,連接埠等等。
      執行個體的可訪問性需要啟動該執行個體對應的相關服務。此處需要注意的是執行個體名和執行個體的服務名並不是相同的。
      預設的執行個體的服務名為MSSQLSERVER,而具名執行個體的服務名為MSSQL$INSTANCE_NAME。
  
  Oracle 
      一個Oracle Server由一個Oracle執行個體和一個Oracle資料庫組成。即:Oracle Server = Oracle Instance + Oracle Database
      在Oracle的執行個體主要是由SGA,PGA以及一堆的後台進程來組成,此稱之為執行個體。
      一系列物理檔案的集合包括控制檔案、資料檔案、聯機記錄檔、參數檔案、密碼檔案等稱之為資料庫。
      一個執行個體只能訪問一個資料庫,一個資料庫可以被多個執行個體訪問。
    
  MySQL
      MySQL執行個體的概念與MSSQL差不多,一個MySQL執行個體下可以存在或訪問N個資料庫。
      不同的執行個體間可以用不同的連接埠號碼來區分,各個執行個體的資料可以使用不同的磁碟目錄。
      MySQL多執行個體通過mysqld_multi工具來進行管理。

 

2、現有的環境
  mysql安裝路徑: /u01/app/mysql
  mysql資料路徑: /u01/app/mysqldata/data3306
  mysql連接埠號碼: 3306
  mysql  版本:5.6.12 Source distribution
  OS     環境:SUSE Linux Enterprise Server 11 SP3  (x86_64)
  

3、初始化執行個體
  #為新執行個體建立資料目錄並賦權
  suse11:~ # mkdir -p /u01/app/mysqldata/data3406  
  suse11:~ # mkdir -p /u01/app/mysqldata/data3506
  suse11:~ # chown mysql:mysql -R /u01/app/mysqldata/data3406
  suse11:~ # chown mysql:mysql -R /u01/app/mysqldata/data3506
  
  #初始化執行個體
  suse11:~ # cd /u01/app/mysql
  suse11:/u01/app/mysql # ./scripts/mysql_install_db --user=mysql --ldata=/u01/app/mysqldata/data3406/
  suse11:/u01/app/mysql # ./scripts/mysql_install_db --user=mysql --ldata=/u01/app/mysqldata/data3506/
  # Author : Leshami
  # Blog   : http://blog.csdn.net/leshami

 

4、修改設定檔
  suse11:~ # more /etc/my.cnf        #本設定檔中僅提供了多執行個體的基本參數,生產環境根據情形自行添加
  [mysqld_multi]
  mysqld = /u01/app/mysql/bin/mysqld_safe
  mysqladmin = /u01/app/mysql/bin/mysqladmin
  user = admin       #此帳戶用於多執行個體關閉時使用,需要在每個執行個體上建立並授權
  password = xxx     #使用統一的密碼便於管理
  
  [mysqld3306]
  socket = /tmp/mysql3306.sock
  port = 3306
  pid-file = /u01/app/mysqldata/data3306/mysql3306.pid
  datadir = /u01/app/mysqldata/data3306
  basedir = /u01/app/mysql
  user = mysql
  server-id=3306
  
  [mysqld3406]
  socket = /tmp/mysql3406.sock
  port = 3406
  pid-file = /u01/app/mysqldata/data3406/mysql3406.pid
  datadir = /u01/app/mysqldata/data3406
  basedir = /u01/app/mysql
  user = mysql
  server-id=3406
  
  [mysqld3506]
  socket = /tmp/mysql3506.sock
  port = 3506
  pid-file = /u01/app/mysqldata/data3506/mysql3506.pid
  datadir = /u01/app/mysqldata/data3506
  basedir = /u01/app/mysql
  user = mysql
  server-id=3506

 

5、啟動關閉多執行個體
  suse11:~ # mysqld_multi report
  Reporting MySQL servers
  MySQL server from group: mysqld3306 is not running
  MySQL server from group: mysqld3406 is not running
  MySQL server from group: mysqld3506 is not running
  
  suse11:~ # mysqld_multi start 3306
  suse11:~ # mysqld_multi start 3406,3506     #可以同時啟動多個執行個體
  suse11:~ # netstat -ntlp  | grep mysql
  tcp        0      0 :::3306                 :::*                    LISTEN      14786/mysqld       
  tcp        0      0 :::3406                 :::*                    LISTEN      15103/mysqld       
  tcp        0      0 :::3506                 :::*                    LISTEN      15371/mysqld
  
  suse11:/tmp # ls *.sock
  mysql3306.sock  mysql3406.sock  mysql3506.sock
  
  #為新執行個體修改密碼及建立賬戶
  suse11:/tmp # mysql -uroot -pxxx -S ./mysql3306.sock  #3306已經有初始密碼
  root@localhost[(none)]> grant shutdown on *.* to 'admin'@'localhost' identified by 'xxx' with grant option;
  
  suse11:/tmp # mysql -uroot -p -S ./mysql3406.sock
  Enter password:  #此時密碼為空白
  root@localhost[(none)]> set password for 'root'@'localhost'=password('xxx');
  
  root@localhost[(none)]> grant shutdown on *.* to 'admin'@'localhost' identified by 'xxx' with grant option;
  
  suse11:/tmp # mysql -uroot -p -S ./mysql3506.sock
  Enter password:  #此時密碼為空白
  root@localhost[(none)]> set password for 'root'@'localhost'=password('xxx');
  
  root@localhost[(none)]> grant shutdown on *.* to 'admin'@'localhost' identified by 'xxx' with grant option;

  #使用TCP方式登入測試
  suse11:/tmp # mysql -uroot -pxxx -P3506
  root@localhost[(none)]>
  
  #檢查多執行個體的狀態
  suse11:/tmp # mysqld_multi report
  Reporting MySQL servers
  MySQL server from group: mysqld3306 is running
  MySQL server from group: mysqld3406 is running
  MySQL server from group: mysqld3506 is running

  #停止多執行個體伺服器
  suse11:~ # mysqld_multi stop 3306
  suse11:~ # mysqld_multi report 3306
  Reporting MySQL servers
  MySQL server from group: mysqld3306 is not running
  suse11:~ # mysqld_multi stop 3406
  suse11:~ # mysqld_multi stop 3506

  #多執行個體伺服器的日誌
  suse11:~ # tail /u01/app/mysql/share/mysqld_multi.log
  Stopping MySQL servers
  
  Warning: Using a password on the command line interface can be insecure.
  141017 23:40:09 mysqld_safe mysqld from pid file /u01/app/mysqldata/data3406/mysql3406.pid ended
  mysqld_multi log file version 2.16; run: Fri Oct 17 23:40:09 2014
  
  Stopping MySQL servers
  
  Warning: Using a password on the command line interface can be insecure.
  141017 23:40:11 mysqld_safe mysqld from pid file /u01/app/mysqldata/data3506/mysql3506.pid ended
  
  #一次啟動多個執行個體
  suse11:~ # mysqld_multi start 3306-3506
  suse11:~ # mysqld_multi report
  Reporting MySQL servers
  MySQL server from group: mysqld3306 is running
  MySQL server from group: mysqld3406 is running
  MySQL server from group: mysqld3506 is running

 

6、配置多執行個體的自啟動
  # echo "/u01/app/mysql/bin/mysqld_multi start 3306-3506" >>/etc/init.d/boot.local


mysql建立多個執行個體,mycnf設定檔需要幾個?

設定檔還是一個,只不過mysql的資料庫存放目錄需要多個,這根據你的執行個體來設定資料庫存放目錄。
給個多執行個體配置案例:
初始化資料庫
[mysql@localhost ~]$ mkdir /mydata/mysql_db/data_1001 #建立資料庫存放目錄
[mysql@localhost ~]$ mkdir /mydata/mysql_db/data_1002
[mysql@localhost ~]$ mkdir /mydata/mysql_db/data_1003
[mysql@localhost mysql_db]$ ./bin/mysql_install_db –basedir=/mydata/mysql_db –datadir=/mydata/mysql_db/data_1001 –user=mysql #資料庫初始化
Installing MySQL system tables…
OK
Filling help tables…
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/mydata/mysql_db/bin/mysqladmin -u root password ‘new-password’
/mydata/mysql_db/bin/mysqladmin -u root -h localhost password ‘new-password’

Alternatively you can run:
/mydata/mysql_db/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /mydata/mysql_db ; /mydata/mysql_db/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /mydata/mysql_db/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /mydata/mysql_db&......餘下全文>>
 
助:mysql 多個連接埠配置/多執行個體安裝

給你個linux的配置 my.cnf的內容

[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe

[client]
socket = /tmp/mysql.sock
default-character-set=utf8

[mysqld1]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
character-set-server=utf8
default-storage-engine=innodb
port = 3306
table_open_cache = 64
innodb_data_home_dir = /usr/local/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/data
innodb_buffer_pool_size = 50M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqld2]
datadir=/usr/local/mysql/data1
basedir=/usr/local/mysql
character-set-server=utf8
default-storage-engine=innodb
port = 3307
table_open_cache = 64
innodb_data_home_dir = /usr/local/mysql/data1
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/data1
innodb_buffer_pool_size = 50M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

----【mysqld】中的配置和單一實例的mysqld配置一致,多執行個體中每個[mysqld]需要有不同的連接埠號碼,sock,datadir

然後是啟動:/usr/local/mysql/bin/mysqld_mulit --defaults-extra-file=/etc/my.cnf start 1

----這裡的數字1 對應[mysqld1] ,關閉就是 把start 改......餘下全文>>
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.