1. 程式人生 > >數據庫介紹(MySQL安裝 體系結構、基本管理)

數據庫介紹(MySQL安裝 體系結構、基本管理)

pat login 思路 第一個 配置 centos5 info 包括 shel

閱讀目錄

  • 1.1 數據庫簡介
  • 1.2 數據庫相關產品
  • 1.3 Mysql簡介
  • 1.4 mysql數據庫的安裝
  • 1.5 mysql 5.7版本安裝說明
  • 2.1 客戶端與服務器端模型
  • 2.2 Mysqld服務的構成
  • 2.3 MySQL管理
  • 2.4 mysql多實例配置
  • 2.5 mysql忘記密碼怎麽辦?
  • 2.6 參考文獻

第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

技術分享圖片 View Code mysql 多實例 啟動腳本

編寫管理腳本3307

技術分享圖片 View Code mysql 多實例 啟動腳本

  註意腳本要給繼續權限才能夠正常使用

第二個裏程碑:創建數據目錄並授權

[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    腳本來源

數據庫介紹(MySQL安裝 體系結構、基本管理)