經過網絡鏈接串,TCP/IP:(用戶名;密碼;IP;port) mysql -uroot -p123 -h 10.0.0.52 -P 3306 經過套接字文件,SOCKET:(用戶名;密碼;Socket路徑) mysql -uroot -p123 -S /application/mysql/tmp/mysql.sock
MySQL在啓動過程php
實例是什麼:mysql
MySQL的後臺進程+線程+預分配的內存結構redis
分爲三層:算法
sql層的處理流程圖解:sql
SQL:結構化的查詢語言(數據庫內部的邏輯語言)又分爲:數據庫
一、判斷緩存
語法、語句、語義服務器
語句類型:DQL select網絡
二、咱們數據庫不能真正理解SQL語句多線程
必須明確的知道,數據在哪一個磁盤的,哪一個文件的哪一個,哪一個頁上。
三、數據庫對象受權狀況進行檢查。
四、解析(解析器)
將sql語句解析成N種執行計劃
mysql無法直接執行sql語句,必須解析成執行計劃,運行執行計劃,最終生成如何區磁盤找數據的方式
五、優化(優化器)
根據不一樣執行計劃,知道哪一個代價是最低的
MySQL5.6之後學習了oracle的基於代價算法,從N種執行計劃中,選擇代價最小的交給「執行器」
六、「執行器」
運行執行計劃
生成如何去磁盤找數據的方式
七、將取數據獲取的方式,交由下層(存儲引擎層)進行處理
八、最終,將取出的數據抽象成管理員或用戶能看懂的方式(表),展示用戶面前。
九、查詢緩存:緩存以前查詢的數據。
假如咱們查詢的表是一個常常有變更的表,查詢緩存不要設置太大。
存儲引擎是充當不一樣表類型的處理程序的服務器組件。
功能:
存數據、取數據
數據的不一樣存儲方式
不一樣的管理方式:
事務(增、刪、改)
備份恢復
高級功能(高可用的架構、讀寫分離架構)
全文搜索
引用完整性
空間數據處理
爲了用戶可以讀懂數據出現的,更好的理解數據。
管理數據的一種方式:
對象包括庫和表,庫中包括多張表,表中包括行記錄和列結構
庫是用目錄表示的,表是庫目錄下的文件表示的
程序文件隨數據目錄一塊兒存儲在服務器安裝目錄下。執行各類客戶機程序、管理程序和實用程序時,將建立程序可執行文件和日誌文件。首要使用磁盤空間的是數據目錄。
每一個數據庫在數據目錄下均具備單一目錄(不管在數據庫中建立何種類型的表)。數據庫目錄存儲如下內容:
數據目錄的位置取決於配置、操做系統、安裝包和分發。典型位置是 /var/lib/mysql。
MySQL 在磁盤上存儲系統數據庫 (mysql)。mysql 包含諸如用戶、特權、插件、幫助列表、事件、時區實現和存儲例程之類的信息。
1. 經過網絡鏈接串,TCP/IP:(用戶名;密碼;IP;port) mysql -uroot -p123 -h 10.0.0.52 -P 3306
3. 經過套接字文件,SOCKET:(用戶名;密碼;Socket路徑) mysql -uroot -p123 -S /application/mysql/tmp/mysql.sock
SQL解析(解析器):解析成 ,執行計劃 mysql可以理解的,執行SQL的一種方式
將sql語句解析成N種執行計劃
mysql無法直接執行sql語句,必須解析成執行計劃,運行執行計劃,最終生成如何
優化(優化器):直接影響選擇哪一個執行計劃
基本規則:根據不一樣執行計劃,知道哪一個代價是最低的
MySQL5.6之後學習了oracle的基於代價算法,從N種執行計劃中,選擇代價最小的交給「執行器」
查詢緩存:緩存以前所查詢的數據
做爲了解,生產中,通常會用相似於redis或memcache來代替
庫 ----->data 就是一個目錄,爲了存放多張表
表 ----->data 在相應的庫中,用多個文件來表示
myisam表:3個文件(.myd數據文件 .myi索引文件 .frm表(列)結構定義文件)
innodb:2個或者1個
鏈接mysql可使用的參數:
[root@db02 ~]# mysql --help -u <user_name> 或 --host=<user_name> # 登錄mysql的用戶 -p<password> # 登錄mysql的密碼 -h <host_name> 或 --host=<host_name> # 遠程鏈接,後面跟鏈接mysql服務器的IP --protocol=<protocol_name> -P <port_number> 或 --port=<port_number> # 指定端口號 -S <socket_name> 或 --socket=<socket_name> # 指定sock文件路徑
兩種鏈接方式
mysql -uroot -p123 -S /application/mysql/tmp/mysql.sock mysql -uroot -p123 -h 10.0.0.52 -P 3306
功能:
1.影響到服務器進程的啓動
2.影響到客戶端程序
如何配置my.cnf
使用不一樣標籤明確指定影響哪部分功能
服務器端:
[server]包括: [mysqld] ---- > 通常設置此項 [mysqld_safe]
客戶端:
[client] ---- > 爲了方便設置此項
[mysql]
[mysqldump]
[mysqladmin]
/etc/my.cnf ---- > /etc/mysql/my.cnf --- > $MYSQL_HOME/my.cnf ---- > defaults-extra-file --- > ~/.my.cnf 若是在啓動mysql時利用--defaults-file指定了參數配置文件,那麼直接讀取指定的文件 /application/mysql/bin/mysqld_safe --defaults-file=/tmp/aa.txt
常規關閉:
mysqladmin shutdown
servive mysqld stop
還有使用kill殺進程的方式關閉,可是儘可能不要使用kill方式關閉
可經過以下地址查看生產高併發環境野蠻粗魯殺死數據庫致使故障企業案例:
http://oldboy.blog.51cto.com/2561410/1431161
http://oldboy.blog.51cto.com/2561410/1431172
實例1:3306
[root@db02 3306]# cat /data/3306/my.cnf [client] port = 3306 socket = /data/3306/mysql.sock [mysqld] user = mysql port = 3306 socket = /data/3306/mysql.sock basedir = /application/mysql datadir = /data/3306/data log-bin = /data/3306/mysql-bin server-id = 6 [mysqld_safe] log-error=/data/3306/my_3306.err pid-file=/data/3306/mysqld.pid
實例2:3307
[root@db02 3306]# cat /data/3307/my.cnf [client] port = 3307 socket = /data/3307/mysql.sock [mysqld] user = mysql port = 3307 socket = /data/3307/mysql.sock basedir = /application/mysql datadir = /data/3307/data log-bin = /data/3307/mysql-bin server-id = 7 [mysqld_safe] log-error=/data/3307/myy_3307.err pid-file=/data/3307/mysqld.pid
3306啓動腳本:
[root@db02 3306]# cat /data/3306/mysql #!/bin/sh #init port=3306 mysql_user="root" CmdPath="/application/mysql/bin" mysql_sock="/data/${port}/mysql.sock" mysqld_pid_file_path=/data/3306/3306.pid start(){ if [ ! -e "$mysql_sock" ];then printf "Starting MySQL...\n" /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null & sleep 3 else printf "MySQL is running...\n" exit 1 fi } stop(){ if [ ! -e "$mysql_sock" ];then printf "MySQL is stopped...\n" exit 1 else printf "Stoping MySQL...\n" mysqld_pid=`cat "$mysqld_pid_file_path"` if (kill -0 $mysqld_pid 2>/dev/null) then kill $mysqld_pid sleep 2 fi fi } restart(){ printf "Restarting MySQL...\n" stop sleep 2 start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) printf "Usage: /data/${port}/mysql {start|stop|restart}\n" esac
3307啓動腳本:
[root@db02 3306]# cat /data/3307/mysql #!/bin/sh #init port=3307 mysql_user="root" CmdPath="/application/mysql/bin" mysql_sock="/data/${port}/mysql.sock" mysqld_pid_file_path=/data/3307/3307.pid start(){ if [ ! -e "$mysql_sock" ];then printf "Starting MySQL...\n" /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null & sleep 3 else printf "MySQL is running...\n" exit 1 fi } stop(){ if [ ! -e "$mysql_sock" ];then printf "MySQL is stopped...\n" exit 1 else printf "Stoping MySQL...\n" mysqld_pid=`cat "$mysqld_pid_file_path"` if (kill -0 $mysqld_pid 2>/dev/null) then kill $mysqld_pid sleep 2 fi fi } restart(){ printf "Restarting MySQL...\n" stop sleep 2 start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) printf "Usage: /data/${port}/mysql {start|stop|restart}\n" esac
mkdir /data/{3306,3307}/data -p chown -R mysql.mysql /data/
cd /application/mysql/scripts ./mysql_install_db --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --user=mysql ./mysql_install_db --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data --user=mysql
5.6.36特殊性:須要建立錯誤日誌文件
touch /data/3306/my_3306.err touch /data/3307/my_3307.err
給啓動腳本執行權限,啓動後檢查
chmod 700 /data/3306/mysql chmod 700 /data/3307/mysql [root@db02 3306]# /data/3306/mysql start Starting MySQL... [root@db02 3306]# /data/3307/mysql start Starting MySQL... [root@db02 3306]# netstat -lntup|grep 330 tcp 0 0 :::3306 :::* LISTEN 3180/mysqld tcp 0 0 :::3307 :::* LISTEN 3388/mysqld
mysql -S /data/3306/mysql.sock mysql -S /data/3307/mysql.sock