資料庫簡介、資料庫相關產品、Mysql簡介、mysql資料庫的安裝、客戶端與伺服器端模型、客戶端與伺服器端模型、MySQL管理、mysql多實例配置、mysql忘記密碼怎麼辦? ...
第1章 資料庫介紹及mysql安裝
1.1 資料庫簡介
資料庫,簡而言之可視為電子化的文件櫃——存儲電子文件的處所,用戶可以對文件中的數據運行新增、截取、更新、刪除等操作。
所謂“資料庫”系以一定方式儲存在一起、能予多個用戶共用、具有儘可能小的冗餘度、與應用程式彼此獨立的數據集合。
1.1.1 什麼是數據
數據是指對客觀事件進行記錄並可以鑒別的符號,是對客觀 事物的性質、狀態以及相互關係等進行記載的物理符號或這些物 理符號的組合。它是可識別的、抽象的符號。
1.1.2 資料庫管理系統
非關係型資料庫
NoSQL:非關係型資料庫(Not only SQL)
不是否定關係型資料庫,做關係型資料庫的的補充。
想做老大,先學會做老二。
關係型資料庫
關係型資料庫的特點
二維表
典型產品 Oracle傳統企業,MySQL是互聯網企業
數據存取是通過SQL(結構化查詢語句)
最大特點,數據安全性方面強(ACID)
1.1.3 NoSQL特性總覽
l 不是否定關係型資料庫,而是作為補充,現在也有部分替代的趨勢。
l 關註高性能,高併發,靈活性,忽略和上述無關的功能。
l 現在也在提升安全性和使用功能。
l 典型產品:Redis(持久化緩存,兩個半天)、MongoDB(最接近關係型數據 的NoSQL)、Memcached。
l 管理不適用SQL管理,而是用一些特殊的 API 或 數據介面。
1.1.4 NoSQL的分類、特點、典型產品
鍵值(KV)存儲:Memcached、Redis
列存儲(column-oriented):HBASE(新浪,360)、Cassandra(200台伺服器集群 )
文檔資料庫(document-oriented):MongoDB(最接近關係型資料庫的NoSQL)
圖形存儲(Graph):Neo4j
數據來源: https://db-engines.com/en/ranking
1.2 資料庫相關產品
1.2.1 Oracle公司產品介紹
Oracle資料庫版本介紹
7--8i--9i--10g—11g--12c--18c(?)
Oracle的市場應用
a) 市場份額第一,趨勢遞減
b) 市場空間,傳統企業
c) 傳統企業也在互聯網化
MySQL資料庫版本介紹
5.0--5.1--5.5--5.6--5.7--8.0
MySQL的市場應用
a) 中、大型互聯網公司
b) 市場空間:互聯網領域第一
c) 趨勢明顯
d) 同源產品:MariaDB、perconaDB
1.2.2 其他公司產品
微軟:SQL Server
微軟和sysbase合作開發的產品,後來自己開發,windows平臺 3,4線小公司,傳統行業在用
IBM :DB2資料庫
市場占有量小
目前只有:國有銀行(人行、中國銀行、工商銀行等)、中國移動應用。
下麵三者廣泛應用在大型互聯網公司
PostgreSQL
MongoDB
Redis
1.3 Mysql簡介
1.3.1 mysql資料庫發展史
1 1979年,報表工具Unireg出現。 2 1985 年,以瑞典David Axmark 為首,成立了一家公司(AB前身),IASM引擎出現。 3 1990年,提供SQL支持。 4 1999-2000年,MySQL AB公司成立,並公佈源碼,開源化。 5 2000年4月BDB引擎出現,支持事務。 6 2008年1月16日,Sun(太陽微系統)正式收購MySQL。 7 2009年4月20日,甲骨文公司宣佈以每股9.50美元,74億美元的總額收購Sun電腦公司,MySQL 轉入Oracle 門下。 8 2013年6月18日,甲骨文公司修改MySQL授權協議,移除了GPL。但隨後有消息稱這是一個bug。
1.3.2 MySQL的特點簡介
開源、社區版免費、簡單,使用方便,可靠、穩定、安全、社區活躍
1.3.3 mysql產品線的介紹
mysql產品線(主線)
3.26--5.2版本
– 正宗後代
– Centos5、6中預設有5.1版本
– Centos7中預設是MariaDB
5.4--5.7 ,8.0版本
– 借鑒社區好的貢獻,進一步開發的版本
– 主流版本:5.5 5.6 5.7
MySQL Cluster 6.0 版本&更高
– 類似於Oracle RAC,硬體要求高。
– 一般各大網站沒有人用
mysql產品線(派生產品)
派生版本有Drizzle、MariaDB、Percona Server及OurDelta等。
1.3.4 企業生產場景選擇MySQL資料庫建議:
1) 穩定版:選擇開源的社區版的穩定版GA版本 2) 產品線:可以選擇5.1或5.5 互聯網公司主流5.5,其次是5.1和5.6 3) 選擇MySQL資料庫GA版發佈後6個月以上的GA版本。 4)要選擇前後幾個月沒有大的BUG修複的版本,而不是大量修複BUG的集中版本 5)最好向後較長時間沒有更新發佈的版本 6)要考慮開發人員開發程式使用的版本是否相容你選的版本 7)作為內部開發人員開發測試資料庫環境,跑大概3-6個月的事件 8)優先企業非核心業務採用新版本的資料庫GA版本軟體 9)向DBA高手請教,或者在及技術氛圍好的群里和大家一起交流,使用真正的高手們用過的好用的GA版本產品 10)若是沒有重要的功能BUG或性能瓶頸,則可以開始考慮作為任何任務數據服務的後端資料庫軟體
1.4 mysql資料庫的安裝
1.4.1 系統環境說明
[root@db02 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@db02 ~]# uname -r 2.6.32-696.el6.x86_64 [root@db02 ~]# /etc/init.d/iptables status iptables: Firewall is not running. [root@db02 ~]# getenforce Disabled [root@db02 ~]# hostname -I 10.0.0.52 172.16.1.52
1.4.2 mysql編譯安裝
安裝依賴包
yum install -y ncurses-devel libaio-devel
安裝cmake編譯工具
cmake
定製功能:存儲引擎、字元集、壓縮等
定製安裝位置、數據存儲位置、文件位置(socket)
yum install cmake -y
創建mysql管理用戶
useradd -s /sbin/nologin -M mysql -u1000 id mysql
下載mysql軟體包,解壓
mkdir -p /server/tools cd /server/tools wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36.tar.gz tar xf mysql-5.6.36.tar.gz
註:這裡使用的是sohu的鏡像源進行下載(軟體版本5.6.36)
官方下載方式參考:http://www.cnblogs.com/clsn/p/8025324.html#_label4
進入查詢目錄,使用cmake進行編譯,安裝,創建軟連接,過程時間較長。
cd mysql-5.6.36 cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.36 \ -DMYSQL_DATADIR=/application/mysql-5.6.36/data \ -DMYSQL_UNIX_ADDR=/application/mysql-5.6.36/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ -DWITH_ZLIB=bundled \ -DWITH_SSL=bundled \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLE_DOWNLOADS=1 \ -DWITH_DEBUG=0 make && make install ln -s /application/mysql-5.6.36/ /application/mysql
1.4.3 資料庫安裝後的操作
複製配置文件
\cp /application/mysql/support-files/my-default.cnf /etc/my.cnf
編譯的MySQL可以暫時不需要設置配置文件。
註意:如果以前操作系統中安裝過rpm格式的mysql,系統中可能會遺留/etc/my.cnf文件,我們需要將它刪除掉
初始化資料庫
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql
防止報錯:資料庫啟動會提示,找不到xx/tmp/mysql.sock,原因是5.6.36版本不會自動創建tmp目錄,需要我們手工創建。
mkdir /application/mysql/tmp
修改程式目錄的屬主,屬組
chown -R mysql.mysql /application/mysql/
複製啟動腳本,並修改許可權
cp support-files/mysql.server /etc/init.d/mysqld chmod 700 /etc/init.d/mysqld
添加環境變數,使用mysql命令
echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile tail -1 /etc/profile source /etc/profile echo $PATH mysql
1.4.4 資料庫安全設置
設置root用戶密碼
mysqladmin -u root password '123456' mysql -uroot -p123456
優化資料庫(清理用戶及無用資料庫)
select user,host from mysql.user; drop user ''@'db02'; drop user ''@'localhost'; drop user 'root'@'db02'; drop user 'root'@'::1'; select user,host from mysql.user; drop database test; show databases;
1.5 mysql 5.7版本安裝說明
主機系統環境說明
[root@db13 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@db13 ~]# uname -r 2.6.32-696.el6.x86_64 [root@db13 ~]# getenforce Disabled [root@db13 ~]# /etc/init.d/iptables status iptables: Firewall is not running. [root@db13 ~]# hostname -I 10.0.0.153 172.16.1.153
獲取軟體(採用二進位包方式進行安裝)
mkdir -p /server/tools cd /server/tools wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
解壓
tar xf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
將軟體移動到程式目錄,創建軟連接
mkdir -p /application/ mv mysql-5.7.17-linux-glibc2.5-x86_64 /application/mysql-5.7.17 ln -s /application/mysql-5.7.17 /application/mysql
添加mysql用戶,併進行授權
useradd -M -s /sbin/nologin -u 1000 mysql chown -R mysql.mysql /application/mysql-5.7.17
初始化資料庫
/application/mysql-5.7.17/bin/mysqld --initialize --user=mysql --basedir=/application/mysql-5.7.17 --datadir=/application/mysql-5.7.17/data
初始化時註意最後一行輸出root密碼
2017-12-13T08:40:31.760309Z 1 [Note] A temporary password is generated for root@localhost: )*1E7=fYd&>i
拷貝配置文件和啟動文件
\cp /application/mysql-5.7.17/support-files/my-default.cnf /etc/my.cn \cp \application/mysql-5.7.17/support-files/mysql.server /etc/init.d/mysqld
# 修改啟動文件內容(配置目錄)
將程式安裝到 /usr/local/ 下 可以省略這步操作
sed 's#/usr/local#/application#g' /application/mysql-5.7.17/bin/mysqld_safe /etc/init.d/mysqld -i
啟動mysql
[root@db13 tools]# /etc/init.d/mysqld start Starting MySQL.Logging to '/application/mysql/data/db13.err'. SUCCESS! [root@db13 tools]# /etc/init.d/mysqld status SUCCESS! MySQL running (1509)
添加環境變數
echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile tail -1 /etc/profile source /etc/profile echo $PATH
修改mysql密碼
[root@db13 tools]# mysqladmin -uroot -p password 123456 Enter password: 【輸入初始化時生成的密碼】 mysqladmin: [Warning] Using a password on the command line interface can be insecure. Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
第2章 Mysql體繫結構與基本管理
2.1 客戶端與伺服器端模型
2.1.1 mysql服務結構
mysql是一個典型的c/s模式,服務端與客戶端兩部分組成
服務端程式 mysqld
客戶端程式 mysql自帶客戶端(mysql、mysqladmin、mysqldump等)
第三方客戶端 API介面(php-mysql)
2.1.2 mysql連接方式
TCP/IP 連接 網路連接串(通過用戶名 密碼 IP 埠進行連接)
mysql -uroot -p123 -h 127.0.0.1 -P 3306
socket 連接 網路套接字(用戶名 密碼 socket文件)
mysql -uroot -p123 -S /application/mysql/tmp/mysql.sock
在linux中使用mysql命令不加其他的參數連接方式即
mysql -uroot -poldboy123使用的是套接字文件方式登錄的
2.1.3 MySQL在啟動過程
啟動後臺守護進程,並生成工作線程
預分配記憶體結構供MySQL處理數據使用
實例就是MySQL的後臺進程+線程+預分配的記憶體結構
2.2 Mysqld服務的構成
2.2.1 連接層
通訊協議為:tcp/ip 或 socket
連接線程 為連接的數量
用戶驗證 為通過用戶名 密碼驗證進行通訊協議
2.2.2 SQL層
sql即結構化的查詢語句(資料庫內部邏輯語言)sql92 sql99
DDL 資料庫定義語言
DCL 資料庫控制語言
DML 資料庫操作語言
DQL 數據查詢語言
SQL層的功能: select * from wordpress.user;
1、判斷語法、語句、語義 判斷語句類型 2、資料庫不能直接響應sql語句 必須明確的知道數據在哪個磁碟 3、資料庫對象授權情況判斷 授權失敗不繼續 4、解析(解析器) 將sql語句解析成執行計劃,運行執行計劃,生成找數據的方式 5、優化 (優化器) 運行執行計劃 5.6之後 基於代價的演算法,從執行計劃中選擇代價最小的交給"執行器" 6、"執行器" 運行執行計劃 最終生產如何去磁碟找數據方式 7、將取數據的方式,交由下層(存儲引擎層)進行處理 8、最終將取出的數據抽象成管理員或用戶能看懂的方式(表),展現在用戶面前 9、查詢緩存: 緩存之前查詢的數據。 假如我們查詢的表是一個經常有變動的表,查詢緩存不要設置太大
SQL層處理流程
2.2.3 存儲引擎層
由上層決定存儲方式
存儲引擎是充當不同表類型的處理程式的伺服器組件。
存儲引擎層功能:
存數據、取數據
數據的不同存儲方式
不同的管理方式:
事務(增、刪、改)
備份恢復
高級功能(高可用的架構、讀寫分離架構)
2.2.4 依賴於存儲引擎的功能
存儲引擎是充當不同表類型的處理程式的伺服器組件。
存儲引擎用於:
存儲數據、檢索數據、通過索引查找數據
存儲介質、 事務功能、 鎖定、備份和恢復、優化
特殊功能:
全文搜索、引用完整性、空間數據處理
雙層處理
上層包括SQL解析器和優化器、下層包含一組存儲引擎
SQL 層不依賴於存儲引擎:
引擎不影響SQL處理
2.2.5 mysql 的邏輯構成(資料庫內部結構)
邏輯構成是為了用戶能夠讀懂數據出現的,讓你更好的理解數據。
管理數據的一種方式。
對象:
庫中包含表,在linux中以目錄表示
表中有列結構與行記錄,在linux中以多個文件表示
行記錄
列結構
切換庫
mysql> use mysql;
查看表
mysql> show tables;
查看列的信息(記錄)
mysql> desc user;
2.2.6 mysql的存儲方式
程式文件隨數據目錄一起存儲在伺服器安裝目錄下。執行各種客戶機程式、管理程式和實用程式時將創建程式可執行文件和日誌文件。首要使用磁碟空間的是數據目錄。
伺服器日誌文件和狀態文件:
包含有關伺服器處理的語句的信息。日誌可用於進行故障排除、監視、複製和恢復。
InnoDB 日誌文件: (適用於所有資料庫)駐留在數據目錄級別。
InnoDB 系統表空間: 包含數據字典、撤消日誌和緩衝區。
每個資料庫在數據目錄下均具有單一目錄(無論在資料庫中創建何種類型的表)。資料庫目錄存儲以下內容:
數據文件: 特定於存儲引擎的數據文件。這些文件也可能包含元數據或索引信息,具體取決於所使用的存儲引擎。 格式文件 (.frm): 包含每個表和/或視圖結構的說明,位於相應的資料庫目錄中。 觸發器: 與某個表關聯併在該表發生特定事件時激活的命名資料庫對象。
數據目錄的位置取決於配置、操作系統、安裝包和分發。典型位置是 /var/lib/mysql。
MySQL 在磁碟上存儲系統資料庫 (mysql)。
mysql 包含諸如用戶、特權、插件、幫助列表、事件、時區實現和存儲常式之類的信息。
2.2.7 MySQL體繫結構小結
sql 優化相關的理念
解析器 : 執行計劃 資料庫執行sql的一種方式
優化器 : 知道基本規則,直接影響將來選擇哪個執行計劃
查詢緩存 : 生產環境中,一般會用redis memcached 來代替
邏輯結構
庫 就是一個目錄,為了存放多張表
表 在相應的庫中,用多個文件來表示
myisam表 3個文件:(.myd數據文件 .myi索引文件 frm表 結構定義文件)
innodb: 2個或者一個,共用表空間(ibdata1 基表 元數據)、獨立表空間(5.6以後預設的表存儲方式)
如何使用磁碟
1、多個庫多個目錄,目錄下存放了多個表的存儲文件
2、 auto.cnf db02.err db02.pid ibdata1 ib_logfile0 ib_logfile1 等
2.3 MySQL管理
2.3.1 連接管理:mysql
[root@db02 ~]# mysql --help
-u <user_name> 或 --host=<user_name>
-p<password>
-h <host_name> 或 --host=<host_name>
--protocol=<protocol_name>
-P <port_number> 或 --port=<port_number>
-S <socket_name> 或 --socket=<socket_name>
常用的連接方式:
套接字: mysql -uroot -p123 -S /application/mysql/tmp/mysql.sock Tcp/Ip: mysql -uroot -p123 -h 10.0.0.52 -P 3306
2.3.2 資料庫的啟動流程
mysqld 文件屬性
[root@db02 ~]# cd /application/mysql/bin/ [root@db02 bin]# file mysqld mysqld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
mysql.server文件屬性
[root@db02 bin]# file ../support-files/mysql.server ../support-files/mysql.server: POSIX shell script text executable
mysqld_safe文件屬性
[root@db02 data]# file /application/mysql/bin/mysqld_safe /application/mysql/bin/mysqld_safe: POSIX shell script text executable
可以看出mysql.server文件與mysqld_safe文件都是腳本文件,最後都調用mysqld二進位文件進行啟動。
2.3.3 mysql的關閉方法
推薦使用的方法:
1、mysqladmin -uroot -p123 shutdown 2、servive mysqld stop
儘量避免使用kill命令
mysqladmin命令關閉mysql
[root@db02 bin]# mysqladmin shutdown -uroot -p123
Warning: Using a password on the command line interface can be insecure.
perror命令
[root@db02 bin]# perror 13 OS error code 13: Permission denied
perror命令是mysql自帶命令,能夠查詢mysql錯誤代碼的含義。
2.3.4 my.cnf 配置文件說明
功能 :
1、影響到伺服器進程的啟動
2、影響到客戶端程式
配置my.cnf
使用不同的"標簽"去明確指定影響哪部分功能
伺服器端
[server] [mysqld] -----> 一般設置此項 [mysqld_safe] [client] ----> 為了方便設置此項 [mysql] [mysqladmin] [mysqldump]
my.cnf文件配置實例
[root@db02 data]# cat /etc/my.cnf [mysqld] basedir=/application/mysql datadir=/application/mysql/data socket=/tmp/mysql.sock log-error=/var/log/mysql.log port=3307 [mysql] socket=/tmp/mysql.sock user=root password=123
檢查進程信息,可以看到與my.cnf配置的相同
[root@db02 data]# ps -ef |grep [my]sql root 3411 1918 0 15:52 pts/1 00:00:00 /bin/sh /application/mysql/bin/mysqld_safe mysql 3548 3411 0 15:52 pts/1 00:00:00 /application/mysql/bin/mysqld --basedir=/application/mysql --datadir=/application/mysql/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/var/log/mysql.log --pid-file=/application/mysql/data/db02.pid --socket=/tmp/mysql.sock --port=3307
my.cnf文件的配置
2.3.5 配置文件的讀取過程
/etc/my.cnf --> /etc/mysql/my.cnf --> $MYSQL_HOME/my.cnf --> defaults-extra-file=/tmp/clsn.txt --> ~/.my.cnf
註:假設4個配置文件都存在,同時使用--defaults-extra-file指定了參數文件,如果這時有一個 "參數變數"在5個配置文件中都出現了,那麼後面的配置文件中的參數變數值會覆蓋前面配置文件中的參數變數值,就是說會使用 ~/.my.cnf 中設置的值
如果使用./bin/mysqld_safe 守護進程啟動mysql資料庫時,使用了 --defaults-file=<配置文件的絕對路徑>參數,這時只會使用這個參數指定的配置文件。
2.4 mysql多實例配置
2.4.1 什麼是MySQL多實例?
簡單地說,MySQL多實例就是在一臺伺服器上同時開啟多個不同的服務埠(如:3306/3307)同時運行多個MySQL服務進程,這些服務進程通過不同的socket監聽不同的服務埠來提供服務。
這些MySQL多實例共用一套MySQL安裝程式,使用不同的my.cnf(也可以相同)配置文件、啟動程式(也可以相同)和數據文件。在提供服務時,多實例MySQL在邏輯上看來是各自獨立的,他們根據配置文件對應設定值,獲得伺服器響應數量的資源。
2.4.2 MySQL多實例的作用與問題
有效利用伺服器資源
當單個伺服器資源有剩餘時,可以充分利用剩餘的資源提供更多的服務,且可以實現資源的邏輯隔離
節約伺服器資源
當公司資金緊張,但是資料庫又需要各自儘量獨立地提供服務,而且,需要主從複製等技術時,多實例就再好不過了
MySQL多實例有它的好處,但也有弊端,比如,會存在資源互相搶占的問題。當某個資料庫實例併發很高或者有SQL慢查詢時,整個實例會消耗大量的系統CPU、磁碟I/O等資源,導致伺服器上的其他資料庫實例提供服務的質量一起下降。
2.4.3 多實例配置思路
1 多套配置文件 2 多套 數據 3 多個socket 4 多個埠 5 多個日誌文件 6 多個啟動程式
2.4.4 多實例配置過程
前期mysql的安裝與1.4MySQL的安裝一致,在這裡就不再重覆(配置完成不要啟動)
第一個裡程碑:多實例配置文件準備
[root@db02 /]# tree /data/ /data/ ├── 3306 │ ├── my.cnf │ └── mysql └── 3307 ├── my.cnf └── mysql
3306埠my.cnf配置文件
[root@db02 /]# 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/mysql_3306.err pid-file=/data/3306/mysqld.pid
3307埠my.cnf配置文件
[root@db02 /]# 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/mysql_3307.err pid-file=/data/3307/mysqld.pid
編寫管理腳本3306
1 [root@db02 /]# cat data/3306/mysql 2 #!/bin/sh 3 #3306 start scripts 4 #init 5 port=3306 6 mysql_user="root" 7 CmdPath="/application/mysql/bin" 8 mysql_sock="/data/${port}/mysql.sock" 9 mysqld_pid_file_path=/data/3306/3306.pid 10 start(){ 11 if [ ! -e "$mysql_sock" ];then 12 printf "Starting MySQL...\n" 13 /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null & 14 sleep 3 15 else 16 printf "MySQL is running...\n" 17 exit 1 18 fi 19 } 20 stop(){ 21 if [ ! -e "$mysql_sock" ];then 22 printf "MySQL is stopped...\n" 23 exit 1 24 else 25 printf "Stoping MySQL...\n" 26 mysqld_pid=`cat "$mysqld_pid_file_path"` 27 if (kill -0 $mysqld_pid 2>/dev/null) 28 then 29 kill $mysqld_pid 30 sleep 2 31 fi 32 fi 33 } 34 35 restart(){ 36 printf "Restarting MySQL...\n" 37 stop 38 sleep 2 39 start 40 } 41 42 case "$1" in 43 start) 44 start 45 ;; 46 stop) 47 stop 48 ;; 49 restart) 50 restart 51 ;; 52 *) 53 printf "Usage: /data/${port}/mysql {start|stop|restart}\n" 54 esacView Code mysql 多實例 啟動腳本
編寫管理腳本3307
1 [root@db02 /]# cat data/3307/mysql 2 #!/bin/sh 3 #3307 start scripts 4 #init 5 port=3307 6 mysql_user="root" 7 CmdPath="/application/mysql/bin" 8 mysql_sock="/data/${port}/mysql.sock" 9 mysqld_pid_file_path=/data/3307/3307.pid 10 start(){ 11 if [ ! -e "$mysql_sock" ];then 12 printf "Starting MySQL...\n" 13 /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null & 14 sleep 3 15 else 16 printf "MySQL is running...\n" 17 exit 1 18 fi 19 } 20 stop(){ 21 if [ ! -e "$mysql_sock" ];then 22 printf "MySQL is stopped...\n" 23 exit 1 24 else 25 printf "Stoping MySQL...\n" 26 mysqld_pid=`cat "$mysqld_pid_file_path"` 27 if (kill -0 $mysqld_pid 2>/dev/null) 28 then 29 kill $mysqld_pid 30 sleep 2 31 fi 32 fi 33 } 34 35 restart(){ 36 printf "Restarting MySQL...\n" 37 stop 38 sleep 2 39 start 40 } 41 42 case "