(6)MySQL實例初始化配置文件講解及多實例主機配置操作

MySQL初始化配置文件作用

Alt text
說明:

  1. 如果沒有告訴mysqld_safe例如分給多少內存這些條件,mysqld_safe會按照統一(默認)的配置進行啓動!
  2. MySQL的啓動很多必要條件都是需要管理人員提前設定好才能夠正常運行!

初始化配置實例

  • 如何提前設定必要條件?

如圖所示:有三個方式進行設定!
Alt text

預編譯的選項: cmake,硬編碼到程序當中

在命令行上初始化配置:

 mysqld_safe 
--skip-grant-tables 
--skip-networking 
--socket=/tmp/mysql.sock &

結論:

cmake裏面加的選項都可以在命令行中加入使用!
如果預編譯和命令行使用的參數相同,那麼會以命令行爲準

問題:

本身編譯好的參數,如果在命令行進行外部干預,會導致在使用mysql命令登錄的時候出現報錯

mysql -uroot -p1234
Warning: Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/application/mysql-5.6.38/tmp/mysql.sock' (2)

解決:

如果命令行指定的參數變化了,在使用mysql的時候也需要加入參數指定一下

mysql -uroot -p1234 -S /tmp/mysql.sock

初始化配置文件my.cnf(重點)

關於配置文件的讀取順序

Alt text

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. $MYSQL_HOME/my.cnf
  4. defaults-extra-file=/tmp/aa.txt
  5. ~/.my.cnf

說明:
-defaults-extar-file優先級最高

假設4個配置文件都存在,同時使用 -defaults-extar-file指定了參數文件,如果這時有一個“參數變量”在5個配置文件中都出現了,那麼後面的配置文件中的參數變量值會覆蓋前面配置文件中的參數變量值,就是說會使用~/.my.cnf中設置的值

注意:

如果使用./bin/mysqld_safe 守護進程啓動mysql數據庫時,使用了參數-defaults-file=<配置文件的絕對路徑>,這時只會使用這個參數指定的配置文件,不會再讀取上面提到的5個路徑!

  • 優先級的結論說明:

1.命令行
2.defaults-file
3.家目錄下的配置文件
4.defaults-extra-file
5.環境變量$MYSQL_HOME
6./etc/mysql/my.cnf
7./etc/my.sql
8.預編譯cmake

mysql的初始化配置文件的使用:

配置實戰例子(沒有最佳的例子,只能在當前環境下根據情況來寫配置文件)

vim /etc/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/mysql
server-id=20
proot=3306
log-bin=/data/mysql/mysql-bin
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.log

如何熟悉寫一個my.cnf配置文件

舉例:

/etc/my.cnf

不僅可以影響實例的啓動(mysqld),還影響客戶端程序

  • 把配置文件分爲兩大部分:
    配置模塊/標籤分類:
    Alt text
[client]所有客戶端程序包括以下
                [mysql]
                [mysqldump]
[server]所有服務器端程序包括以下
                [mysqld]
                [mysqld_safe]
  • 服務器實例:模塊/標籤

可以通過[mysqld_safe](範疇比較大)
最終啓動的程序[mysqld](控制實例的)
1、在[mysqld]模塊下設置路徑
datadir
basedir
socket
log路徑
。。。。
在/etc/my.ocf編寫:基礎配置文件

[mysqld]
basedir=/application/mysql
datadir=/application/mysql/data
socket=/tmp/mysql.sock
log-error=/tmp/mysql.log
log-bin=/data/mysql/mysql-bin #二進制文件
server-id=3306   #唯一標識非零-65535

[client]
socket=/tmp/mysql.sock

#下面是用戶和密碼,不安全不建議用
user=root
password=123

MySQL多實例配置

多實例是什麼?

多套進程 + 多套線程 + 多套預分配內存

多個端口,多個配置文件,多個日誌文件,多個socket,多套數據,多個server_id
Alt text

爲什麼要使用多實例?

  1. 簡單理解就是在一臺服務器上,mysql服務開啓多個不同的端口(3306,3307)運行多個服務進程,這些mysql服務進程通過不同的socket來監聽不同的數據端口,進而互不干涉的提供各自的服務。

  2. 在同一臺服務器上,mysql多實例會去共用一套mysql應用程序,因此無需多次部署,但是,mysql 多實例之間會各自使用不同的my.cnf配置文件,啓動程序和數據文件。在提供服務方面,mysql多實例在邏輯上看起來是各自獨立,互不干涉的,並且多個實例之間是根據配置文件的設定值,來獲取相關服務器的硬件資源。

多實例優點

  1. 有效利用服務器資源
    當單個服務器資源過剩時,可以充分利用剩餘的資源來提供更多的服務

  2. 節約服務器資源
    當公司資金緊張,但數據庫又需要數據庫之間各自提供服務時,並且還想使用主從同步等技術,此時多實例就再好不過了

  3. 方便後期架構擴展
    當公司的某個項目才啓動時,啓動初期並不一定有很大的用戶量,因此可以先用一組物理數據庫服務器,在上面部署多個實例,方便後續架構擴展、遷移

多實例缺點

  1. 資源互相搶佔問題
    當某個服務實例併發很高或者有慢查詢時,整個實例會消耗更多的內存、CPU和IO資源,這將導致服務器上的其它實例提供服務的質量下降。
    這就比如說合租房的各個租客,每當早晨上班時,都會洗漱,此時衛生間的佔用率就大,各個租客總會發生等待。

MySQL多實例實踐

思路:

  1. 多套配置文件
/data/3307/my.cnf
/data/3308/my.cnf
  1. 多套數據
/data/3307/data
/data/3308/data
  1. 多個端口
3307
3308
  1. 多個socket
socket=/data/3307/mysql.sock
socket=/data/3308/mysql.sock
  1. 多個日誌文件
log-error=/data/3307/error_3307.err
log-error=/data/3308/error_3308.err
pid-file=/data/3307/mysqld.pid
pid-file=/data/3308/mysqld.pid
  1. 多個啓動程序

多實例配置方法

  1. mysql_multi
  2. 實現上面的6種思路
  • 例子
  1. 創建多個目錄及授權
#創建多個目錄
mkdir -p /data/330{7..9}
#授權
 chown -R mysql.mysql /data/330*
  1. 創建多個配置文件
#創建多個配置文件my.cnf

vim my.cnf
[mysqld]
basedir=/application/mysql #主程序是調用的不是獨佔!也可以重新裝一個
datadir=/data/3307/data
socket=/data/3307/mysql.sock
port=3307
log-error=/data/3307/mysql.err
log_bin=/data/3307/mysql-bin
binlog_format=row
skip-name-resolve
server-id=7

有幾個實例就要寫幾個配置文件,

  1. 初始化
/application/mysql/scripts/mysql_install_db  --user=mysql --basedir=/application/mysql  --datadir=/data/3307/data

有幾個實例就要初始化幾個

3.1 查看在my.cnf種寫的文件是否都已經自動生成,如果第一次沒有生成,就再也沒法生成了,需要自己手動創建!

  1. 啓動多實例

啓動時不能直接啓動,因爲mysqld會先讀取/etc/my.cnf配置文件,所以要使用mysqld_safe指定參數--defaults-file=

/application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf &
  1. 驗證
netstat -lnp|grep 330
  1. 連接測試
mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章