第1章 數據庫介紹及mysql安裝javascript
1.1 數據庫簡介
數據庫,簡而言之可視爲電子化的文件櫃——存儲電子文件的處所,用戶能夠對文件中的數據運行新增、截取、更新、刪除等操做。php
所謂「數據庫」系以必定方式儲存在一塊兒、能予多個用戶共享、具備儘量小的冗餘度、與應用程序彼此獨立的數據集合。html
1.1.1 什麼是數據
數據是指對客觀事件進行記錄並能夠鑑別的符號,是對客觀 事物的性質、狀態以及相互關係等進行記載的物理符號或這些物 理符號的組合。它是可識別的、抽象的符號。java
1.1.2 數據庫管理系統
非關係型數據庫mysql
NoSQL:非關係型數據庫(Not only SQL)linux
不是否認關係型數據庫,作關係型數據庫的的補充。
想作老大,先學會作老二。
關係型數據庫redis
關係型數據庫的特色算法
二維表
典型產品 Oracle傳統企業,MySQL是互聯網企業
數據存取是經過SQL(結構化查詢語句)
最大特色,數據安全性方面強(ACID)
1.1.3 NoSQL特性總覽
l 不是否認關係型數據庫,而是做爲補充,如今也有部分替代的趨勢。sql
l 關注高性能,高併發,靈活性,忽略和上述無關的功能。docker
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版本
– 正宗後代
– Centos五、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之後默認的表存儲方式)
如何使用磁盤
一、多個庫多個目錄,目錄下存放了多個表的存儲文件
二、 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 配置文件說明
功能 :
一、影響到服務器進程的啓動
二、影響到客戶端程序
配置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
![](http://static.javashuo.com/static/loading.gif)
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 esac
編寫管理腳本3307
![](http://static.javashuo.com/static/loading.gif)
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 "$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 esac
注意腳本要給繼續權限纔可以正常使用
第二個里程碑:建立數據目錄並受權
[root@db02 /]# mkdir /data/{3306,3307}/data -p [root@db02 /]# 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/mysql_3306.err touch /data/3307/mysql_3307.err
第五個里程碑:啓動多實例
[root@db02 scripts]# /data/3306/mysql start Starting MySQL... [root@db02 scripts]# /data/3307/mysql start Starting MySQL...
檢查mysql狀態
[root@db02 scripts]# ps -ef |grep [my]sql root 4341 1 0 16:46 pts/1 00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf --pid-file=/data/3306/3306.pid mysql 4526 4341 13 16:46 pts/1 00:00:03 /application/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3306/mysql_3306.err --pid-file=/data/3306/3306.pid --socket=/data/3306/mysql.sock --port=3306 root 4549 1 0 16:46 pts/1 00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf --pid-file=/data/3307/3307.pid mysql 4734 4549 51 16:46 pts/1 00:00:08 /application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3307/mysql_3307.err --pid-file=/data/3307/3307.pid --socket=/data/3307/mysql.sock --port=3307
檢查端口信息
[root@db02 scripts]# netstat -lntup |grep mysql tcp 0 0 :::3306 :::* LISTEN 4526/mysqld tcp 0 0 :::3307 :::* LISTEN 4734/mysqld
至此mysql的多實例就配置完成
2.4.5 多實例mysql的使用
本地鏈接方式
mysql -S /data/3306/mysql.sock mysql -S /data/3307/mysql.sock
2.4.6 關於mysql多實例的選擇
1、資金緊張性公司的選擇 資金緊張,公司業務訪問量又不大,但又但願不一樣的業務的數據庫服務各自盡可能獨立 2、併發訪問不是特別大的業務 當公司業務訪問量不太大的時候,服務器的資源基本都是浪費的,這就適合多實例的使用 3、門戶網站應用MySQL多實例場景 配置硬件好的服務器,能夠節省IDC機櫃空間,跑多實例也不會減小硬件資源不慢的浪費 通常是從庫多實例,例如:某部門使用IBM服務器爲48核CPU,內存96GB、一臺服務器跑3~4個實例:此外,sina網也是用的多實例,內存48GB左右。企業環境中通常將多實例應用在測試環境。
2.5 mysql忘記密碼怎麼辦?
第一步:將服務停掉
/etc/init.d/mysqld stop
第二步:加參數啓動服務
cd /application/mysql/bin/
mysqld_safe --skip-grant-table --user=mysql --skip-networking &
這種模式下
無密碼登錄
網絡用戶沒法登錄
只能本地登錄
和受權有關的命令都沒法執行
第三步:修改密碼
[root@db02 3306]# mysql mysql> update mysql.user set password=password('123') where user='root' and host='localhost'; mysql> flush privileges;
MYSQL5.7 修改密碼修改字段 authentication_string
第四步:退出重啓服務
/etc/init.d/mysqld restart
第五步:登陸驗證
mysql -uroot -p123
至此密碼修改爲功
2.6 參考文獻
https://zh.wikipedia.org/wiki/MySQL#%E6%AD%B7%E5%8F%B2 mysql歷史 http://blog.51cto.com/oldboy/1728380 MySQL常見錯誤代碼(error code)及代碼說明 https://www.abcdocker.com/abcdocker/28 MySQL入門介紹 https://www.abcdocker.com/abcdocker/90 MySQL多實例 http://oldboy.blog.51cto.com 腳原本源
轉自:http://www.cnblogs.com/clsn/p/8038964.html#_label6