mysql學習筆記(一)—— mysql的3種安裝方式總結

初始數據庫

數據庫的基礎知識

Mysql是⼀個開放源代碼的數據庫管理系統(DBMS),它是由Mysql AB公司開發、發佈並⽀持的。Mysql是⼀個跨平臺的開源關係數據庫管理系統,⼴泛地應⽤在Internet上的中⼩型⽹站公司開發中。

數據庫是由⼀批數據構成的有序的集合。這些數據被存放在結構化的數據表⾥。數據表之間互相關聯,反映了客觀事物間的本質聯繫。數據庫系統提供對數據的安全控制和完整性控制。本節將介紹數據庫中的⼀些基本概念,包括:數據庫的定義、數據表的定義和數據類型等。

在關係數據庫中,數據庫的表是⼀系列⼆維數組的集合,⽤來存儲數據和操作數據的邏輯結構。它是由縱向的列和橫向的⾏組成,⾏被稱爲記錄,是組織數據的單位;列被稱爲字段,每⼀列表示記錄的⼀個屬性,都有相應的描述信息,如數據類型、數據寬度等。
在這裏插入圖片描述

數據類型

數據類型決定了數據在計算機中的存儲格式,代表不同的信息類型。
常⽤的數據類型有:整數數據類型、浮點數數據類型、精確⼩數類型、⼆進制數據類型、⽇期/時間數據類型、字符串數據類型;表中的每⼀個字段就是某種指定數據類型。

主鍵

主鍵(Primary Key)⽤於唯⼀地標識表中的每⼀條記錄。可以定義表中的⼀列或者多列爲主鍵。主鍵列上不能有兩⾏相同的值,也不能爲空值。

mysql工具

MySQL服務器端實⽤⼯具程序如下:

mysqld:SQL後臺程序。該程序必須運⾏之後,客戶端才能通過連接服務器來
訪問數據庫。
mysqld_safe:服務器啓動腳本。在Unix和Net Ware中使⽤mysqld_safe來啓動mysqld服務器。
mysql.server:服務器啓動腳本。該腳本⽤於使⽤包含爲特定級別的、運⾏啓
動服務的腳本、運⾏⽬錄的系統。它調⽤mysqld_safe來啓動MySQL服務器。
mysqld_multi:服務器啓動腳本,可以啓動或停⽌系統上安裝的多個服務器。
amyisamchk:⽤來描述、檢查、優化和維護MyISAM表的實⽤⼯具。
mysqlbug:MySQL缺陷報告腳本。它可以⽤來向MySQL郵件系統發送缺陷報告。
mysql_install_db:該腳本⽤默認權限創建MySQL授權表。通常只是在系統上⾸次安裝MySQL時執⾏⼀次。

MySQL客戶端實⽤⼯具程序如下:

 myisampack:壓縮MyISAM表以產⽣更⼩的只讀表的⼀個⼯具。
 mysql:交互式輸⼊SQL語句或從⽂件以批處理模式執⾏它們的命令⾏⼯具。
 mysqlaccess:檢查訪問主機名、⽤戶名和數據庫組合的權限的腳本。
 mysqladmin:執⾏管理操作的客戶程序,例如創建或刪除數據庫,重載授權
表,將表刷新到硬盤上,以及重新打開⽇志⽂件。mysqladmin還可以⽤來檢索
版本、進程,以及服務器的狀態信息。
 mysqlbinlog:從⼆進制⽇志讀取語句的⼯具。在⼆進制⽇志⽂件中包含執⾏過
的語句,可⽤來幫助系統從崩潰中恢復。
 mysqlcheck:檢查、修復、分析以及優化表的表維護客戶程序。
 mysqldump:將MySQL數據庫轉儲到⼀個⽂件(例如SQL語句或tab分隔符⽂
本⽂件)的客戶程序
 mysqlhotcopy:當服務器在運⾏時,快速備份MyISAM或ISAM表的⼯具。
 mysql import:使⽤LOAD DATA INFILE將⽂本⽂件導⼊相關表的客戶程序。
 mysqlshow:顯示數據庫、表、列以及索引相關信息的客戶程序。
 perror:顯示系統或MySQL錯誤代碼含義的⼯具。

mysql版本

針對不同⽤戶,Mysql分爲2個不同的版本:
MySQL Community Server(社區版):該版本完全免費,但是官⽅不提供技術⽀持
MySQL Enterprise Server(企業版服務器):它能夠以很⾼的性價⽐爲企業提供數據倉庫應⽤,⽀持ACID事務處理,提供完整的提交、回滾、崩潰恢復和⾏級鎖定功能。但是該版本需付費使⽤,官⽅提供電話技術⽀持

MySQL的命名機制由3個數字和1個後綴組成,例如mysql-5.5.13
第⼀個數字(5)是主版本號,描述了⽂件格式,所有版本5的發⾏版都有相同的⽂件格式。
第⼆個數字(5)是發⾏級別,主版本號和發⾏級別組合在⼀起便構成了發⾏序列號
第三個數字(13)是在此發⾏系列的版本號,隨每次新發布版本遞增。通常選擇已經發⾏的最新版本。

MySQL的優勢

  • 速度:運⾏速度快。
  • 價格:MySQL對多數個⼈⽤來說是免費的。
  • 容易使⽤:與其他⼤型數據庫的設置和管理相⽐,其複雜程度較低,易於學習。
  • 可移植性:能夠⼯作在衆多不同的系統平臺上,例如:Windows、Linux、Unix等
  • 豐富的接⼝:提供了⽤於C、C++、Eiffel、Java、Perl、PHP、Ruby、Python等語⾔的API
  • ⽀持查詢語⾔:MySQL可以利⽤標準SQL語法和⽀持ODBC(開放式數據庫連接)的應⽤程序
  • 安全性和連續性:⼗分靈活和安全的權限和密碼系統,允許基於主機的驗證。連接到服務器時,所有的密碼傳輸均採⽤加密形式,從⽽保證了密碼安全。

數據庫安裝

源碼安裝

本次安裝的是mysql5.7版本,相比mysql5.6版本
新增特性如下:

  • 原生支持 Systemd
  • 更好的性能:對於多核 CPU、固態硬盤、鎖有着更好的優化
  • 更好的 InnoDB 存儲引擎
  • 更爲健壯的複製功能:複製帶來了數據完全不丟失的方案,傳統金融客戶也可以選擇使用MySQL 數據庫。
  • 還有一點就是第一次登陸數據庫的時候,會生成隨機的密碼,而不是沒有密碼。可以在日誌裏面去篩選

系統環境:Centos 7.3 x86_64

在這裏插入圖片描述
因爲 centos7.3 默認安裝了 mariadb-libs,所以先要卸載掉
查看是否安裝 mariadb
rpm -qa | grep mariadb
卸載 mariadb
rpm -e --nodeps mariadb-libs

在這裏插入圖片描述

前提:安裝依賴包

cmake:由於從 MySQL5.5 版本開始放棄使用了常規的 configure 編譯方法,所以需要 CMake 編譯
器,用於設置 mysql 的編譯參數。如:安裝目錄、數據存放目錄、字符編碼、排序規則等。
Boost #從 MySQL 5.7.5 開始 Boost 庫是必需的,mysql 源碼中用到了 C++的 Boost 庫,要求
必須安裝boost1.59.0 或以上版本
gcc 是 Linux 下的 C 語言編譯工具,mysql 源碼編譯完全由 C 和 C++編寫,要求必須安裝gcc
bison:Linux 下 C/C++語法分析器
ncurses:字符終端處理庫

安裝cmake

tar zxf cmake-3.16.4.tar.gz
cd cmake-3.16.4/
./bootstrap       #檢查配置環境
gmake && gmake installl

如果檢查報錯

-- Configuring incomplete, errors occurred!
See also "/usr/local/src/mysql-5.5.33/CMakeFiles/CMakeOutput.log".
See also "/usr/local/src/mysql-5.5.33/CMakeFiles/CMakeError.log".

一般cmake是需要c環境,
需要提前 下載 yum -y install gcc gcc-c++ openssl m4
刪除下面文件後再重啓編譯
rm -f CMakeCache.txt

安裝ncurses

tar zxf ncurses-6.2.tar.gz 
cd ncurses-6.2
./configure && make && make install

安裝bison

tar zxf bison-3.5.2.tar.gz 
 cd bison-3.5.2
 ./configure && make && make install

安裝boost

tar zxf boost_1_59_0.tar.gz 
 ls
 mv boost_1_59_0 /usr/local/boost

創建用戶和組

groupadd -r mysql && useradd -r -g mysql -s /bin/false -M mysql
mkdir /usr/local/mysql ---創建目錄
mkdir /usr/local/mysql/data ---數據庫目錄

cmake 編譯mysql源碼包

tar zxf mysql-5.7.30.tar.gz 
cd mysql-5.7.30
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_SYSTEMD=1 \
-DWITH_BOOST=/usr/local/boost 
## 編譯安裝
make -j2 && make install -j2

注:配置解釋:

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql [MySQL 安裝的根目錄]
-DMYSQL_DATADIR=/usr/local/mysql /data [MySQL 數據庫文件存放目錄]
-DSYSCONFDIR=/etc [MySQL 配置文件所在目錄]
-DWITH_MYISAM_STORAGE_ENGINE=1 [添加 MYISAM 引擎支持 ]
-DWITH_INNOBASE_STORAGE_ENGINE=1 [添加 InnoDB 引擎支持 ]
-DWITH_ARCHIVE_STORAGE_ENGINE=1 [添加 ARCHIVE 引擎支持 ]
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock [指定 mysql.sock 位置 ]
-DWITH_PARTITION_STORAGE_ENGINE=1 [安裝支持數據庫分區 ] -DEXTRA_CHARSETS=all [使 MySQL 支持所有的擴展字符] -DDEFAULT_CHARSET=utf8 [設置 MySQL 的默認字符集爲utf8]
-DDEFAULT_COLLATION=utf8_general_ci [設置默認字符集校對規則 ]
-DWITH-SYSTEMD=1 [可以使用 systemd 控制 mysql 服務]
-DWITH_BOOST=/usr/local/boost [指向 boost 庫所在目錄]

編譯完成以後呢,會在/usr/local/mysql裏面產生一些數據庫文件,不過默認是root
我們把權限改成mysql

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

優化執行路徑
ln -s /usr/local/mysql/bin/* /usr/local/bin
或者

cat >> /etc/profile << EOF
export PATH=\$PATH:/usr/local/mysql/bin
EOF

source /etc/profile

一定要有\,$符號轉義,或者寫進去路徑不對
修改/etc/my.cnf,如果沒有自己添加
以下內容只作爲啓動文件
以後如果i需要其他的功能,可以再來添加其他的區塊

cat > /etc/my.cnf << EOF
[mysqld]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
socket=/tmp/mysql.sock
pid-file=/usr/local/mysql/data/mysql.pid
log-error=/usr/local/mysql/data/mysql.err
EOF

初始化數據庫

[root@localhost ~]# mysqld --initialize --user mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@localhost ~]# cd /usr/local/mysql/data/
[root@localhost data]# ll
總用量 123008
-rw-r-----. 1 mysql mysql       56 6月   5 18:07 auto.cnf
-rw-------. 1 mysql mysql     1680 6月   5 18:07 ca-key.pem
-rw-r--r--. 1 mysql mysql     1112 6月   5 18:07 ca.pem
-rw-r--r--. 1 mysql mysql     1112 6月   5 18:07 client-cert.pem
-rw-------. 1 mysql mysql     1680 6月   5 18:07 client-key.pem
-rw-r-----. 1 mysql mysql      425 6月   5 18:07 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 6月   5 18:29 ibdata1
-rw-r-----. 1 mysql mysql 50331648 6月   5 18:29 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 6月   5 18:07 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 6月   5 18:29 ibtmp1
drwxr-x---. 2 mysql mysql     4096 6月   5 18:07 mysql
-rw-r-----. 1 mysql mysql    54741 6月   5 19:38 mysql.err
-rw-r-----. 1 mysql mysql        6 6月   5 18:29 mysql.pid
drwxr-x---. 2 mysql mysql     8192 6月   5 18:07 performance_schema
-rw-------. 1 mysql mysql     1676 6月   5 18:07 private_key.pem
-rw-r--r--. 1 mysql mysql      452 6月   5 18:07 public_key.pem
-rw-r--r--. 1 mysql mysql     1112 6月   5 18:07 server-cert.pem
-rw-------. 1 mysql mysql     1680 6月   5 18:07 server-key.pem
drwxr-x---. 2 mysql mysql     8192 6月   5 18:07 sys

注 1:以 root 初始化操作時要加–user=mysql 參數,生成一個隨機密碼(注意保存登錄時用)
注 2:MySQL 5.7.6 之前的版本執行這個腳本初始化系統數據庫
/usr/local/mysql/bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
5.7.6 之後版本初始系統數據庫腳本(本文使用此方式初始化)
#/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

啓動數據庫

因爲默認存放pid位置在/var/lib/mysql.pid
和我們在/etc/my.cnf定義的不一樣,所以修改一處,是他們相同
sed -i s#/var/lib/mysql.pid#/usr/local/mysql/data/mysql.pid#g /usr/lib/systemd/system/mysqld.service

準備啓動文件

cp /usr/local/mysql/usr/lib/systemd/system/mysql.service /usr/lib/systemd/system
systemctl daemon-reload
systemctl start mysqld
netstat -anpt | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      60664/mysqld        

二進制安裝

二進制安裝和源碼安裝相對比就是省去了編譯過程,其他後面的配置我們可以寫成腳本,一鍵執行就🆗,但是,爲了學習,還是都整出來吧,首先我們得去官網下載mysql5.7.30的二進制包
官網二進制源碼包

我下載的是64位 的這個

在這裏插入圖片描述

前提準備

先移除自帶的mariadb-libs
rpm -e mariadb-libs --nodeps
yum -y install wget gcc gcc-c++ openssl-devel m4 ncurses-devel

創建用戶和數據存儲目錄

 groupadd -r mysql && useradd -r -g mysql -s /sbin/nologin -M mysql
 mkdir /usr/local/mysql/data

解壓二進制源碼包

tar zxf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz 
mv mysql-5.7.30-linux-glibc2.12-x86_64 /usr/local/mysql
cd /usr/local/mysql
[root@localhost mysql]# ll
總用量 292
drwxr-xr-x.  2 mysql mysql   4096 6月   5 08:45 bin
drwxr-xr-x.  5 mysql mysql   4096 6月   5 11:36 data
drwxr-xr-x.  2 mysql mysql     55 6月   5 08:45 docs
drwxr-xr-x.  3 mysql mysql   4096 6月   5 08:45 include
drwxr-xr-x.  5 mysql mysql    230 6月   5 08:45 lib
-rw-r--r--.  1 mysql mysql 275235 3月  24 01:35 LICENSE
drwxr-xr-x.  4 mysql mysql     30 6月   5 08:45 man
-rw-r--r--.  1 mysql mysql    587 3月  24 01:35 README
drwxr-xr-x. 28 mysql mysql   4096 6月   5 08:45 share
drwxr-xr-x.  2 mysql mysql     90 6月   5 11:35 support-files
[root@localhost mysql]# 

這就和源碼長時間安裝完後的結果一樣
優化執行路徑
ln -s /usr/local/mysql/bin/* /usr/local/bin/

修改數據庫主配置文件

cat > /etc/my.cnf << EOF
[mysqld]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
socket=/tmp/mysql.sock
pid-file=/usr/local/mysql/data/mysql.pid
log-error=/usr/local/mysql/data/mysql.err
EOF

初始化數據庫

[root@localhost ~]# mysqld --initialize --user mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@localhost ~]# cd /usr/local/mysql/data
[root@localhost data]# ll
總用量 122960
-rw-r-----. 1 mysql mysql       56 6月   5 11:33 auto.cnf
-rw-------. 1 mysql mysql     1676 6月   5 11:33 ca-key.pem
-rw-r--r--. 1 mysql mysql     1112 6月   5 11:33 ca.pem
-rw-r--r--. 1 mysql mysql     1112 6月   5 11:33 client-cert.pem
-rw-------. 1 mysql mysql     1676 6月   5 11:33 client-key.pem
-rw-r-----. 1 mysql mysql      425 6月   5 11:33 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 6月   5 11:36 ibdata1
-rw-r-----. 1 mysql mysql 50331648 6月   5 11:36 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 6月   5 11:33 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 6月   5 11:36 ibtmp1
drwxr-x---. 2 mysql mysql     4096 6月   5 11:33 mysql
-rw-r-----. 1 mysql mysql     4444 6月   5 12:48 mysql.err
-rw-r-----. 1 mysql mysql        6 6月   5 11:36 mysql.pid
drwxr-x---. 2 mysql mysql     8192 6月   5 11:33 performance_schema
-rw-------. 1 mysql mysql     1680 6月   5 11:33 private_key.pem
-rw-r--r--. 1 mysql mysql      452 6月   5 11:33 public_key.pem
-rw-r--r--. 1 mysql mysql     1112 6月   5 11:33 server-cert.pem
-rw-------. 1 mysql mysql     1680 6月   5 11:33 server-key.pem
drwxr-x---. 2 mysql mysql     8192 6月   5 11:33 sys
[root@localhost data]# 

啓動數據庫

[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# service mysqld start
[root@localhost ~]# ss -anplt | grep 3306
LISTEN     0      80          :::3306                    :::*                   users:(("mysqld",pid=44902,fd=21))

rpm包安裝mysql

rpm安裝的是最簡單的最快速的一種方式(網速下載的慢不算在內),一般用在自己做測試就好了,因爲裏面好多配置參數都是系統自定義的,可能會和我們生產環境會有出處。

準備官方repo源

wget http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm
rpm -ivh mysql57-community-release-el7-10.noarch.rpm 

安裝完成以後
在這裏插入圖片描述
mysql的repo源集成了5.5 、5.6、 5.7、 8.0各個版本
下載那個版本就在哪裏
enabled = 1
在這裏插入圖片描述

yum安裝mysql

[root@localhost ~]# yum install mysql-community-server -y
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# systemctl enable mysqld
[root@localhost ~]# netstat -anpt | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      3634/mysqld         
[root@localhost ~]# 

總結:3種安裝方式的對比

安裝方式 對比
源碼安裝 一般用在定製性較強,擴展功能多的環境裏,相對耗時間
二進制安裝 中性方案,一般企業較常用,也相對省時間,步驟較少,可自定義安裝位置,socket文件等;
yum安裝 小環境或測試使用,部署速度快,簡單,系統內置性強,參與感較低。

數據庫的創建與刪除

create database xxx 創建xxx數據庫

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.01 sec)

drop database xxx 刪除數據庫

mysql> drop database test2;
Query OK, 0 rows affected (0.01 sec)

修改字符集

查看默認字符集

mysql> show create database test;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

創建新的數據庫並修改默認的字符集

創建test1修改utf8
mysql> create database test1 default character set utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

mysql> show create database test1
    -> ;
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+
| test1    | CREATE DATABASE `test1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)
## 創建test2修改ascii
mysql> create database test2 default character set ascii collate ascii_general_ci;
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> show create database test2;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| test2    | CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET ascii */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章