文章目錄
MySQL初始化配置文件作用
說明:
- 如果沒有告訴mysqld_safe例如分給多少內存這些條件,mysqld_safe會按照統一(默認)的配置進行啓動!
- MySQL的啓動很多必要條件都是需要管理人員提前設定好才能夠正常運行!
初始化配置實例
- 如何提前設定必要條件?
如圖所示:有三個方式進行設定!
預編譯的選項: 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(重點)
關於配置文件的讀取順序
- /etc/my.cnf
- /etc/mysql/my.cnf
- $MYSQL_HOME/my.cnf
- defaults-extra-file=/tmp/aa.txt
- ~/.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),還影響客戶端程序
- 把配置文件分爲兩大部分:
配置模塊/標籤分類:
[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
爲什麼要使用多實例?
-
簡單理解就是在一臺服務器上,mysql服務開啓多個不同的端口(3306,3307)運行多個服務進程,這些mysql服務進程通過不同的socket來監聽不同的數據端口,進而互不干涉的提供各自的服務。
-
在同一臺服務器上,mysql多實例會去共用一套mysql應用程序,因此無需多次部署,但是,mysql 多實例之間會各自使用不同的my.cnf配置文件,啓動程序和數據文件。在提供服務方面,mysql多實例在邏輯上看起來是各自獨立,互不干涉的,並且多個實例之間是根據配置文件的設定值,來獲取相關服務器的硬件資源。
多實例優點
-
有效利用服務器資源
當單個服務器資源過剩時,可以充分利用剩餘的資源來提供更多的服務 -
節約服務器資源
當公司資金緊張,但數據庫又需要數據庫之間各自提供服務時,並且還想使用主從同步等技術,此時多實例就再好不過了 -
方便後期架構擴展
當公司的某個項目才啓動時,啓動初期並不一定有很大的用戶量,因此可以先用一組物理數據庫服務器,在上面部署多個實例,方便後續架構擴展、遷移
多實例缺點
- 資源互相搶佔問題
當某個服務實例併發很高或者有慢查詢時,整個實例會消耗更多的內存、CPU和IO資源,這將導致服務器上的其它實例提供服務的質量下降。
這就比如說合租房的各個租客,每當早晨上班時,都會洗漱,此時衛生間的佔用率就大,各個租客總會發生等待。
MySQL多實例實踐
思路:
- 多套配置文件
/data/3307/my.cnf
/data/3308/my.cnf
- 多套數據
/data/3307/data
/data/3308/data
- 多個端口
3307
3308
- 多個socket
socket=/data/3307/mysql.sock
socket=/data/3308/mysql.sock
- 多個日誌文件
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
- 多個啓動程序
多實例配置方法
- mysql_multi
- 實現上面的6種思路
- 例子
- 創建多個目錄及授權
#創建多個目錄
mkdir -p /data/330{7..9}
#授權
chown -R mysql.mysql /data/330*
- 創建多個配置文件
#創建多個配置文件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
有幾個實例就要寫幾個配置文件,
- 初始化
/application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3307/data
有幾個實例就要初始化幾個
3.1 查看在my.cnf種寫的文件是否都已經自動生成,如果第一次沒有生成,就再也沒法生成了,需要自己手動創建!
- 啓動多實例
啓動時不能直接啓動,因爲mysqld會先讀取/etc/my.cnf配置文件,所以要使用
mysqld_safe
指定參數--defaults-file=
/application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf &
- 驗證
netstat -lnp|grep 330
- 連接測試
mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"