1. 程式人生 > 其它 >初識MySQL資料庫

初識MySQL資料庫

一、資料庫的基本概念

  1、資料

  描述事物的符號記錄

  包括數字、文字、圖形、影象、聲音、檔案記錄等

  以“記錄”形式按統一的格式進行儲存

  2、表

  將不同的記錄組織在一起

  用來儲存具體資料

  3、資料庫

  表的集合,是儲存資料的倉庫

  以一定的組織方式儲存的相互有關的資料集合

  是按照資料結構來組織、儲存和管理資料的倉庫

  4、資料庫管理系統(DBMS):是實現對資料庫資源有效組織、管理和存取的系統軟體

  資料庫的建立和維護功能、資料定義功能、資料操縱功能、資料庫的執行管理功能、通訊功能

  5、資料庫系統

  是一個人機系統,由硬體、OS、資料庫、DBMS、應用軟體和資料庫使用者組成

  使用者可以通過DBMS或應用程式操作資料庫

二、資料庫系統發展史

  1、第一代資料庫

  自20世紀60年代起,第一代資料庫系統問世

  是層次模型與網狀模型的資料庫系統

  為統一管理和共享資料提供了有力的支撐

  2、第二代資料庫

  20世紀70年代初,第二代資料庫——關係資料庫開始出現

  20世紀80年代初,IBM公司的關係資料庫系統DB2問世,開始逐步取代層次與網狀模型的資料庫,成為行業主流

  到目前為止,關係資料庫系統仍佔領資料庫應用的主要地位

  3、第三代資料庫

  自20世紀80年代開始,適應不同領域的新型資料庫系統不斷湧現

  面向物件的資料庫系統,實用性強、適應面廣

  20世紀90年代後期,形成了多種資料庫系統共同支撐應用的局面

  一些新的元素被新增進主流資料庫系統中,例如,Oracle支撐的“關係-物件”資料庫模型

  4、當今主流資料庫介紹

  SQL Server(微軟公司產品):面向Windows作業系統;簡單、易用

  Oracle(甲骨文公司產品):面向所有主流平臺;安全、完善、操作複雜

  DB2(IBM公司產品):面向所有主流平臺;大型、安全、完善

  MySQL(甲骨文公司收購):免費、開源、體積小

三、關係資料庫

  關係資料庫系統時基於關係模型的資料庫系統

  關係模型的資料結構使用簡單易懂的二維資料表

  關係模型可用簡單的“實體-關係”(E-R)圖來表示

  E-R圖中包含了實體(資料物件)、關係和屬性三個要素

  1、實體:也稱為例項,對應現實世界中可區別於其他物件的“事件”或“事物”,如,銀行客戶、銀行賬戶等

  2、屬性:實體所具有的某一特性,一個實體可以有多個屬性,如,“銀行客戶”實體集中的每一個實體均具有姓名、地址。電話等屬性

  3、聯絡:實體集之間的對應關係稱為聯絡,也稱為關係,如,銀行客戶和銀行賬戶之間存在“儲蓄”的關係

  4、所有實體及實體之間聯絡的集合構成一個關係資料庫

  5、關係資料庫的儲存結構是二維表格

  在每個二維表中,每一行稱為一條記錄,用來描述一個物件的資訊;每一列稱為一個欄位,用來描述物件的一個屬性

四、非關係資料庫

  1、非關係資料庫也被稱為NoSQL(Not Only SQL)

  2、儲存資料不以關係模型為依據,不需要固定的表格式

  3、非關係型資料庫的優點:資料庫可高併發讀寫、對海量資料高效率儲存與訪問、資料庫具有高擴充套件性與高可用性

  4、常用的非關係資料庫:Redis、MongoDB等

五、MySQL資料庫

  1、一款深受歡迎的開源關係型資料庫

  2、Oracle旗下的產品

  3、遵守GPL協議,可以免費使用與修改

  4、特點:效能卓越、服務穩定;開源、無版權限制、成本低;多執行緒、多使用者;基於C/S(客戶端/伺服器)架構;安全可靠

  5、MySQL商業版是由MySQL AB公司負責開發與維護,需要付費才能使用;MySQL社群版是由分散在世界各地的MySQL開發者、愛好者一起開發與維護,可以免費使用

  • 商業版組織管理與測試環節更加嚴格,會比社群版更穩定
  • 商業版不遵守GPL,社群版遵守GPL可以免費使用
  • 商業版可獲得7*24小時的服務,社群版則沒有

  6、MySQL產品陣營

  • 第一陣營:5.0-5.1陣營,可說是早期產品的延續
  • 第二陣營:5.4-5.7陣營,整合了MySQL AB公司、社群和第三方公司開發的儲存引擎,從而提高效能
  • 第三陣營:6.0-7.1陣營,就是MySQL Cluster版本,為適應新時代對資料庫的叢集需求而開發
  • 下載網址: http://www.dev.mysql.com/downloads

六、MySQL資料庫安裝

#!/bin/bash
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake

cd /opt/
tar zxvf mysql-5.7.17.tar.gz
tar zxvf boost_1_59_0.tar.gz


mv boost_1_59_0 /usr/local/boost
cd /opt/mysql-5.7.17/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1

make && make install

useradd -M -s /sbin/nologin  mysql

cat > /etc/my.cnf <<EOF
[client]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
 
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
auto-rehash
 
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
EOF

chown -R mysql:mysql /usr/local/mysql/

chown mysql:mysql /etc/my.cnf

echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
source /etc/profile

cd /usr/local/mysql/bin/

./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld



yum -y install expect

/usr/bin/expect <<-EOF
spawn mysqladmin -u root -p password "abc123"
expect "Enter password:" 
send "\n"
expect eof
EOF

mysql -u root -p"abc123" -e "grant all privileges on *.* to 'root'@'%' identified by 'abc123';"

1、MySQL資料庫自動補全命令

1.1 臨時使用自動補全功能

mysql -u root -p --auto-rehash

1.2 永久使用自動補全功能

vi /etc/my.cnf
 
[mysql]
auto-rehash

1.3 使用軟體mycli實現自動補全功能

//安裝相關依賴軟體(需要配置yum官方或阿里源進行安裝)
yum -yinstallepel-release
yum -yinstallzlib-develbzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc
//建立目錄,並新增配置
mkdir ~/.pip/
 
cat > ~/.pip/pip.conf <<EOF
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
 
[install]
trusted-host=mirrors.aliyun.com
EOF
//安裝相關依賴軟體,解壓Python軟體包並進行編譯安裝
yum -y install libffi-devel zlib* python-devel openssl-devel
tar -zxvf Python-3.9.0.tgz
cd Python-3.9.0/
./configure --prefix=/usr/local/python --with-ssl
make && make install
//優化路徑,安裝pip3
yum -y install libffi-devel zlib* python-devel openssl-devel
tar -zxvf Python-3.9.0.tgz
cd Python-3.9.0/
./configure --prefix=/usr/local/python --with-ssl
make && make install
//登入測試
    
mycli -u root -p <密碼>