1. 程式人生 > 其它 >mysql MySQL二進位制安裝及原始碼包安裝

mysql MySQL二進位制安裝及原始碼包安裝

MySQL二進位制安裝及原始碼包安裝

 

 

目錄

 

內容概述

1.MySQL二進位制安裝
2.MySQL原始碼包安裝
3.MySQL資料庫基本管理

內容詳細

1.MySQL二進位制安裝

MySQL二進位制安裝需要用到二進位制包,二進位制包其實就是編譯好的原始碼包,這樣我們就省去了編譯的步驟了。

1.解除安裝MariaDB
yum -y remove mariadb-libs.x86_64

2.建立使用者
useradd -M -s /sbin/nologin -r mysql

3.安裝依賴包:
yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf

4.下載MySQL二進位制包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz

5.解壓二進位制包並做好軟連結
tar -xf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz 
mv mysql-5.7.35-linux-glibc2.12-x86_64 /usr/local/
ln -s /usr/local/mysql-5.7.35-linux-glibc2.12-x86_64/ /usr/local/mysql

6.配置MySQL資料存放目錄並授權
chown -R mysql.mysql /usr/local/mysql-5.7.35-linux-glibc2.12-x86_64
mkdir /mysql_data
chown -R mysql.mysql /mysql_data/

7.初始化MySQL服務
# 在這裡我們瞭解一下MySQL5.6與MySQL5.7在安裝時的一些區別
	1)首先是需要安裝boost_1_59_0,這裡推薦二進位制安裝MySQL5.7,因為已經過了cmake階段,已經安裝好了
	2)初始化命令有所不同:
	# 5.6初始化命令
	/service/mysql/scripts/mysql_install_db --user=mysql --basedir= --datadir=
	# 5.7初始化命令
	/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir= --datadir=
	# 這裡的--initialize會生成一個臨時的隨機密碼,通常密碼的路徑會告訴我們,我們需要使用這個密碼登入資料庫,並且修改密碼也需要一定的強度,不然會提示你密碼不安全,一般包含大小寫字母,數字以及特殊符號
	# 如果不想生成這個密碼的話,還可以使用這個引數 --initialize-insecure
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/mysql_data
引數解釋:
--initialize	: 指定初始化(生成一個臨時密碼)
--user			: 指定使用者(一般為mysql使用者)
--basedir		: mysql安裝目錄
--datadir		: 資料儲存的目錄

8.編寫配置檔案並啟動
# 編寫配置檔案
注:MySQL的配置檔案預設是/etc/my.cnf
cat /etc/my.cnf
# 指定配置的是MySQL服務端
[mysqld]
# 指MySQL的安裝目錄
basedir=/usr/local/mysql
# MySQL的資料目錄
datadir=/mysql_data
# MySQL的預設埠
port=3306
# Mysql的socket檔案儲存路徑
socket=/usr/local/mysql/mysql.sock
# MySQL儲存資料的預設字符集
character-set-server=utf8mb4
# Mysql日誌儲存路徑
log-error=/var/log/mysqld.log
# MySQL 程序pid儲存路徑
pid-file=/tmp/mysqld.pid
			
# 指定的是配置MySQL客戶端
[mysql]
# 客戶端讀取的Socket檔案的路徑
socket=/usr/local/mysql/mysql.sock

# 指定客戶端的socket檔案路徑
[client]
socket=/usr/local/mysql/mysql.sock

# 啟動MySQL服務
將目錄中的MySQL啟動指令碼拷貝到/etc/init.d/mysqld,並新增一些內容
cp support-files/mysql.server /etc/init.d/mysqld
vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/mysql_data
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start 

9.配置環境變數
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile

10.配置system管理
vim /usr/lib/systemd/system/mysqld.service

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

systemctl daemon-reload
systemctl start mysqld

11.修改登入密碼
在我們知道一開始生成的密碼的情況下,我們登入MySQL
mysql -uroot -p"xxxxx"
在MySQL命令列中執行
alter user   root@localhost   identified  by  'llyy@123!';	# 密碼強度要符合要求
FLUSH PRIVILEGES;

2.MySQL原始碼包安裝

㈡ 安裝需求

安裝需求 具體配置
安裝目錄(basedir) /mysql_3307
資料目錄(datadir) /mysql_3307/data
埠號 3307
socket檔案位置 $basedir/mysql.sock
字符集 utf8mb4

####㈢ ==瞭解配置選項==

  • 常用配置選項

配置選項 描述 預設值 建議值
CMAKE_INSTALL_PREFIX 安裝基目錄(basedir) /usr/local/mysql 根據需求
MYSQL_DATADIR 資料目錄(datadir) $basedir/data 根據需求
SYSCONFDIR 預設配置檔案my.cnf路徑   /etc
MYSQL_TCP_PORT TCP/IP埠 3306 非預設埠
MYSQL_UNIX_ADDR 套接字socket檔案路徑 /tmp/mysql.sock $basedir/
DEFAULT_CHARSET 預設字符集 latin1 utf8mb4
DEFAULT_COLLATION 預設校驗規則 latin1_swedish_ci utf8mb4_general_ci
WITH_EXTRA_CHARSETS 擴充套件字符集 all all
ENABLED_LOCAL_INFILE 是否啟用本地載入外部資料檔案功能
OFF 建議開啟
WITH_SSL SSL支援型別 system 建議顯式指定
WITH_BOOST Boost庫原始碼的位置   Boost庫是構建MySQL所必需的,建議事先下載
  • 儲存引擎相關配置項

說明:

以下選項值均為布林值,0或1;0代表不編譯到伺服器中,1代表編譯,建議都靜態編譯到伺服器中。

其他的儲存引擎可以根據實際需求在安裝時通過WITH_xxxx_STORAGE_ENGINE=1的方式編譯到伺服器中。

配置選項 描述
WITH_INNOBASE_STORAGE_ENGINE 將InnoDB儲存引擎外掛構建為靜態模組編譯到伺服器中;建議編譯到伺服器中
WITH_PARTITION_STORAGE_ENGINE 是否支援分割槽
WITH_FEDERATED_STORAGE_ENGINE 本地資料庫是否可以訪問遠端mysql資料
WITH_BLACKHOLE_STORAGE_ENGINE 黑洞儲存引擎,接收資料,但不儲存,直接丟棄
WITH_MYISAM_STORAGE_ENGINE 將MYISAM儲存引擎靜態編譯到伺服器中
MySQL原始碼包安裝自然需要的是原始碼包,原始碼包與二級制包的關係是二級制包是原始碼包cmake並且編譯過的,所以可以節省大量的時間。
原始碼包安裝除了在編譯階段需要大量時間外,其他的步驟與二進位制安裝基本一致

1.解除安裝MariaDB
yum -y remove mariadb-libs.x86_64

2.建立使用者
useradd -M -s /sbin/nologin -r mysql

3.安裝依賴包:
yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf openssl openssl-devel

4.安裝boots(C++的庫)(如果是自帶boost版本的不需要安裝)
wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -xf boost_1_59_0.tar.gz -C /usr/local/

5.下載原始碼包並解壓
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35.tar.gz
tar -xf mysql-5.7.35.tar.gz 

6.進入安裝目錄並cmake
注意 安裝路徑 資料儲存路徑 套接字檔案路徑  埠號 不自帶boost的還得帶上-DWITH_BOOST=/usr/local/boost_1_59_0 路徑
cd mysql-5.7.35

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.35 \
-DMYSQL_DATADIR=/usr/local/mysql-5.7.35/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.7.35/tmp/mysql.sock \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-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=system \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0
***自帶boost
cmake . \
-DCMAKE_INSTALL_PREFIX=/mysql_3307 \
-DMYSQL_DATADIR=/mysql_3307/data \
-DMYSQL_TCP_PORT=3307 \
-DMYSQL_UNIX_ADDR=/mysql_3307/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_SSL=system \
-DWITH_BOOST=boost
7.編譯並安裝
make 	# 需要較長時間	或者make -j cpu數  注意:多核編譯容易造成記憶體溢位,4g記憶體比較穩妥,但有小概率會編譯失敗(快是真的快)
make install
建立軟連結:
ln -s /usr/local/mysql-5.7.35/ /usr/local/mysql

8.建立一些必要的目錄
mkdir /usr/local/mysql-5.7.35/{data,tmp}
touch /var/log/mysqld.log
chown -R mysql.mysql /usr/local/mysql-5.7.35
chown -R mysql.mysql /var/log/mysqld.log

9. 初始化資料庫
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
# 初始化完成後會生成密碼,後邊登入資料庫需要用到

10.啟動資料庫
配置system管理

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql-5.7.35/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

systemctl daemon-reload

編輯配置檔案
vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql-5.7.35
datadir=/usr/local/mysql-5.7.35/data
port=3306
socket=/usr/local/mysql-5.7.35/tmp/mysql.sock
character-set-server=utf8mb4
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql-5.7.35/tmp/mysqld.pid
[mysql]
socket=/usr/local/mysql-5.7.35/tmp/mysql.sock
[client]
socket=/usr/local/mysql-5.7.35/tmp/mysql.sock

systemctl start mysqld	# 啟動資料庫

11.配置環境變數
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile

12.修改登入密碼
在我們知道一開始生成的密碼的情況下,我們登入MySQL
mysql -uroot -p"xxxxx"
在MySQL命令列中執行
alter user   root@localhost   identified  by  'llyy@123!';	# 密碼強度要符合要求
FLUSH PRIVILEGES;

 

3.MySQL資料庫基本管理

設定Mysql密碼

初始狀態下,管理員root的密碼為空或者是隨機生成的,而且至允許本機登入,一般情況下,我們安裝好MySQL之後的第一件事就是修改預設的密碼。

# 如果原密碼為空,可以不用-p引數
mysqladmin -uroot password "xxxxx"

# 如果有密碼且你還記得的話,那麼:
mysqladmin -uroot -p"xxxxx" password "yyyyy"  

MySQL連線工具與方式

1.MySQL自帶的連線命令工具
Mysql自帶的連線工具叫`mysql`,下面我們來詳細介紹一下mysql連線工具
mysql
# 常見的特定於客戶機的連線選項:
-u:             指定使用者  mysql -uroot
-p:             指定密碼  mysql -uroot -p567
-h:             指定主機域  mysql -uroot -p567 -h127.0.0.1
-P:             指定埠    mysql -uroot -p567 -h127.0.0.1 -P3307
-S:             指定socket檔案 mysql -uroot -p567 -S socket檔案存放路徑
-e:             指定SQL語句(庫外執行SQL語句) mysql -uroot -p567 -e "show databases;"
--protocol:     指定連線方式 mysql --protocol=TCP  --protocol=socket

連線方式:
1. TCP/IP的連線方式
2. 套接字連線方式,socket連線
3. 預設使用socket方式連線
檢視方式:
在mysql命令列中輸入:status;
# 需要注意的是:
因為使用TCP/IP連線,需要建立三次握手
不一定-h都是tcp,-hlocalhost是socket連線
mysql -uroot -p -hlocalhost

MySQL配置檔案

MySQL配置檔案的作用是配置MySQL,使MySQL按照我們指定的方式健康執行

1.在執行mysql命令時,下列配置會生效,即mysql服務啟動時生效
[mysqld]
skip-grant-tables	# 跳過密碼驗證
port=3306
character_set_server=utf8
default-storage-engine=innodb
innodb_file_per_table=1

2.針對客戶端命令的全域性配置,當mysql客戶端命令執行時,下列配置生效
[client]
port=3306
default-character-set=utf8
user=root
password=123

3.只針對mysql這個客戶端的配置,2中的是全域性配置,而此處的則是隻針對mysql這個命令的區域性配置
[mysql]
port=3306
default-character-set=utf8
user=root
password=4573

# 如果沒有[mysql],則使用者在執行mysql命令時的配置以client為準

統一字符集編碼

統一字元編碼十分有必要,不統一字元編碼就會出現亂碼的問題

首先,我們可以修改系統的字符集編碼
LANG=us_EN.UTF-8
LANG=zh_CN.UTF-8
臨時修改報錯命令為英文:LANG=us_EN.UTF-8
# 永久修改系統字符集:
vim /etc/locale.conf
LANG=us_EN.UTF-8

我們可以在cmake的時候指定字符集
cmake .
-DDEFAULT_CHARSET=UTF8 \
-DDEFAULT_COLLATION=UTF8_GENERAL_CI

當然也可以在配置檔案中指定字符集
vim /etc/my.cnf
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
 
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
修改完畢後重啟服務
檢視修改的結果,在MySQL命令列中執行:
show variables like '%char%';

校驗規則:
utf8_general_ci
1. ci:大小寫不敏感
2. cs或bin:大小寫敏感
# 一個表裡不可能出現同名不同大小寫的欄位

# 檢視校驗規則:
show collation;

utf8和utf8mb4之間有什麼區別?
utf8不支援emoji表情而utf8mb4支援

我們還可以通過SQL語句指定字符集編碼
在MySQL命令列中輸入:create database db1 charset utf8mb4 collate utf8mb4_general_ci;

修改MySQL root密碼

修改root密碼是十分有必要的,在生產環境中要求我們隔一段時間就修改密碼
1.知曉root密碼的情況下修改密碼
# mysqladmin -uroot -p"舊密碼" password '新密碼'
# MySQL命令列中輸入:	# 前提是知曉原密碼並登入資料庫
alter user root@localhost identified by 'xxxxx';
FLUSH PRIVILEGES;

2.不知曉root密碼的情況下去修改密碼
# 修改配置檔案,在[mysqld]下加入一條命令
[mysqld]
skip_grant_tables	# 跳過授權表
systemctl stop mysqld
systemctl start mysqld
在MySQL命令列輸入:UPDATE mysql.user set authentication_string = PASSWORD ("xxxxxx") WHERE User = "root" and Host="localhost";
FLUSH PRIVILEGES;
# 密碼修改完畢後記得刪除配置檔案中的跳過授權表的命令
然後停止,重啟資料庫

3.遠端授權
grant all privileges on *.* to root@'%' identified by 'xxxxx';
flush privileges;

mysqladmin命令

1.修改密碼,設定密碼:passwd
mysqladmin -uroot -p舊密碼 password '新密碼'

2.關閉MySQL服務:shutdown
mysqladmin -uroot -p密碼 -S socket檔案路徑 shutdown

3.庫外建庫:create
mysqladmin -uroot -p密碼 create egon
mysql -uroot -p123456 -e 'create database egon'

4.庫外刪除資料庫:drop
mysqladmin -uroot -p123456 drop egon
輸入y/N

5.檢視配置檔案所有的預設引數:variables
mysqladmin -uroot -p123456 variables
mysqladmin -uroot -p123456 variables | grep server_id 

6.檢測MySQL程序是否存活:ping
mysqladmin -uroot -p123456 ping

7.檢視資料庫 慢查詢,負載資訊:status
mysqladmin -uroot -p123456 status
Uptime                   MySQL伺服器已經執行的秒數
Threads                  活躍執行緒(客戶)的數量 
Questions                從mysqld啟動起來自客戶問題的數量   已經發送給伺服器的查詢的個數
Slow queries             已經超過long_query_time秒的查詢數量 
Opens                    mysqld已經打開了多少表 
Flush tables             flush ..., refresh和reload命令數量 
Open tables              現在被開啟的表數量
Queries per second avg: 0.046   負載

8.過載授權表,重新整理快取主機:reload,相當於flush privileges
mysqladmin -uroot -p123456 reload

9.重新整理binlog日誌
mysqladmin -uroot -p123456 flush-log

 

目錄

 

內容概述

1.MySQL二進位制安裝
2.MySQL原始碼包安裝
3.MySQL資料庫基本管理

內容詳細

1.MySQL二進位制安裝

MySQL二進位制安裝需要用到二進位制包,二進位制包其實就是編譯好的原始碼包,這樣我們就省去了編譯的步驟了。

1.解除安裝MariaDB
yum -y remove mariadb-libs.x86_64

2.建立使用者
useradd -M -s /sbin/nologin -r mysql

3.安裝依賴包:
yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf

4.下載MySQL二進位制包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz

5.解壓二進位制包並做好軟連結
tar -xf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz 
mv mysql-5.7.35-linux-glibc2.12-x86_64 /usr/local/
ln -s /usr/local/mysql-5.7.35-linux-glibc2.12-x86_64/ /usr/local/mysql

6.配置MySQL資料存放目錄並授權
chown -R mysql.mysql /usr/local/mysql-5.7.35-linux-glibc2.12-x86_64
mkdir /mysql_data
chown -R mysql.mysql /mysql_data/

7.初始化MySQL服務
# 在這裡我們瞭解一下MySQL5.6與MySQL5.7在安裝時的一些區別
	1)首先是需要安裝boost_1_59_0,這裡推薦二進位制安裝MySQL5.7,因為已經過了cmake階段,已經安裝好了
	2)初始化命令有所不同:
	# 5.6初始化命令
	/service/mysql/scripts/mysql_install_db --user=mysql --basedir= --datadir=
	# 5.7初始化命令
	/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir= --datadir=
	# 這裡的--initialize會生成一個臨時的隨機密碼,通常密碼的路徑會告訴我們,我們需要使用這個密碼登入資料庫,並且修改密碼也需要一定的強度,不然會提示你密碼不安全,一般包含大小寫字母,數字以及特殊符號
	# 如果不想生成這個密碼的話,還可以使用這個引數 --initialize-insecure
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/mysql_data
引數解釋:
--initialize	: 指定初始化(生成一個臨時密碼)
--user			: 指定使用者(一般為mysql使用者)
--basedir		: mysql安裝目錄
--datadir		: 資料儲存的目錄

8.編寫配置檔案並啟動
# 編寫配置檔案
注:MySQL的配置檔案預設是/etc/my.cnf
cat /etc/my.cnf
# 指定配置的是MySQL服務端
[mysqld]
# 指MySQL的安裝目錄
basedir=/usr/local/mysql
# MySQL的資料目錄
datadir=/mysql_data
# MySQL的預設埠
port=3306
# Mysql的socket檔案儲存路徑
socket=/usr/local/mysql/mysql.sock
# MySQL儲存資料的預設字符集
character-set-server=utf8mb4
# Mysql日誌儲存路徑
log-error=/var/log/mysqld.log
# MySQL 程序pid儲存路徑
pid-file=/tmp/mysqld.pid
			
# 指定的是配置MySQL客戶端
[mysql]
# 客戶端讀取的Socket檔案的路徑
socket=/usr/local/mysql/mysql.sock

# 指定客戶端的socket檔案路徑
[client]
socket=/usr/local/mysql/mysql.sock

# 啟動MySQL服務
將目錄中的MySQL啟動指令碼拷貝到/etc/init.d/mysqld,並新增一些內容
cp support-files/mysql.server /etc/init.d/mysqld
vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/mysql_data
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start 

9.配置環境變數
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile

10.配置system管理
vim /usr/lib/systemd/system/mysqld.service

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

systemctl daemon-reload
systemctl start mysqld

11.修改登入密碼
在我們知道一開始生成的密碼的情況下,我們登入MySQL
mysql -uroot -p"xxxxx"
在MySQL命令列中執行
alter user   root@localhost   identified  by  'llyy@123!';	# 密碼強度要符合要求
FLUSH PRIVILEGES;

2.MySQL原始碼包安裝

㈡ 安裝需求

安裝需求 具體配置
安裝目錄(basedir) /mysql_3307
資料目錄(datadir) /mysql_3307/data
埠號 3307
socket檔案位置 $basedir/mysql.sock
字符集 utf8mb4

####㈢ ==瞭解配置選項==

  • 常用配置選項

配置選項 描述 預設值 建議值
CMAKE_INSTALL_PREFIX 安裝基目錄(basedir) /usr/local/mysql 根據需求
MYSQL_DATADIR 資料目錄(datadir) $basedir/data 根據需求
SYSCONFDIR 預設配置檔案my.cnf路徑   /etc
MYSQL_TCP_PORT TCP/IP埠 3306 非預設埠
MYSQL_UNIX_ADDR 套接字socket檔案路徑 /tmp/mysql.sock $basedir/
DEFAULT_CHARSET 預設字符集 latin1 utf8mb4
DEFAULT_COLLATION 預設校驗規則 latin1_swedish_ci utf8mb4_general_ci
WITH_EXTRA_CHARSETS 擴充套件字符集 all all
ENABLED_LOCAL_INFILE 是否啟用本地載入外部資料檔案功能 OFF 建議開啟
WITH_SSL SSL支援型別 system 建議顯式指定
WITH_BOOST Boost庫原始碼的位置   Boost庫是構建MySQL所必需的,建議事先下載
  • 儲存引擎相關配置項

說明:

以下選項值均為布林值,0或1;0代表不編譯到伺服器中,1代表編譯,建議都靜態編譯到伺服器中。

其他的儲存引擎可以根據實際需求在安裝時通過WITH_xxxx_STORAGE_ENGINE=1的方式編譯到伺服器中。

配置選項 描述
WITH_INNOBASE_STORAGE_ENGINE 將InnoDB儲存引擎外掛構建為靜態模組編譯到伺服器中;建議編譯到伺服器中
WITH_PARTITION_STORAGE_ENGINE 是否支援分割槽
WITH_FEDERATED_STORAGE_ENGINE 本地資料庫是否可以訪問遠端mysql資料
WITH_BLACKHOLE_STORAGE_ENGINE 黑洞儲存引擎,接收資料,但不儲存,直接丟棄
WITH_MYISAM_STORAGE_ENGINE 將MYISAM儲存引擎靜態編譯到伺服器中
MySQL原始碼包安裝自然需要的是原始碼包,原始碼包與二級制包的關係是二級制包是原始碼包cmake並且編譯過的,所以可以節省大量的時間。
原始碼包安裝除了在編譯階段需要大量時間外,其他的步驟與二進位制安裝基本一致

1.解除安裝MariaDB
yum -y remove mariadb-libs.x86_64

2.建立使用者
useradd -M -s /sbin/nologin -r mysql

3.安裝依賴包:
yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf openssl openssl-devel

4.安裝boots(C++的庫)(如果是自帶boost版本的不需要安裝)
wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -xf boost_1_59_0.tar.gz -C /usr/local/

5.下載原始碼包並解壓
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35.tar.gz
tar -xf mysql-5.7.35.tar.gz 

6.進入安裝目錄並cmake
注意 安裝路徑 資料儲存路徑 套接字檔案路徑  埠號 不自帶boost的還得帶上-DWITH_BOOST=/usr/local/boost_1_59_0 路徑
cd mysql-5.7.35

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.35 \
-DMYSQL_DATADIR=/usr/local/mysql-5.7.35/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.7.35/tmp/mysql.sock \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-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=system \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0
***自帶boost
cmake . \
-DCMAKE_INSTALL_PREFIX=/mysql_3307 \
-DMYSQL_DATADIR=/mysql_3307/data \
-DMYSQL_TCP_PORT=3307 \
-DMYSQL_UNIX_ADDR=/mysql_3307/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_SSL=system \
-DWITH_BOOST=boost
7.編譯並安裝
make 	# 需要較長時間	或者make -j cpu數  注意:多核編譯容易造成記憶體溢位,4g記憶體比較穩妥,但有小概率會編譯失敗(快是真的快)
make install
建立軟連結:
ln -s /usr/local/mysql-5.7.35/ /usr/local/mysql

8.建立一些必要的目錄
mkdir /usr/local/mysql-5.7.35/{data,tmp}
touch /var/log/mysqld.log
chown -R mysql.mysql /usr/local/mysql-5.7.35
chown -R mysql.mysql /var/log/mysqld.log

9. 初始化資料庫
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
# 初始化完成後會生成密碼,後邊登入資料庫需要用到

10.啟動資料庫
配置system管理

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql-5.7.35/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

systemctl daemon-reload

編輯配置檔案
vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql-5.7.35
datadir=/usr/local/mysql-5.7.35/data
port=3306
socket=/usr/local/mysql-5.7.35/tmp/mysql.sock
character-set-server=utf8mb4
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql-5.7.35/tmp/mysqld.pid
[mysql]
socket=/usr/local/mysql-5.7.35/tmp/mysql.sock
[client]
socket=/usr/local/mysql-5.7.35/tmp/mysql.sock

systemctl start mysqld	# 啟動資料庫

11.配置環境變數
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile

12.修改登入密碼
在我們知道一開始生成的密碼的情況下,我們登入MySQL
mysql -uroot -p"xxxxx"
在MySQL命令列中執行
alter user   root@localhost   identified  by  'llyy@123!';	# 密碼強度要符合要求
FLUSH PRIVILEGES;

 

3.MySQL資料庫基本管理

設定Mysql密碼

初始狀態下,管理員root的密碼為空或者是隨機生成的,而且至允許本機登入,一般情況下,我們安裝好MySQL之後的第一件事就是修改預設的密碼。

# 如果原密碼為空,可以不用-p引數
mysqladmin -uroot password "xxxxx"

# 如果有密碼且你還記得的話,那麼:
mysqladmin -uroot -p"xxxxx" password "yyyyy"  

MySQL連線工具與方式

1.MySQL自帶的連線命令工具
Mysql自帶的連線工具叫`mysql`,下面我們來詳細介紹一下mysql連線工具
mysql
# 常見的特定於客戶機的連線選項:
-u:             指定使用者  mysql -uroot
-p:             指定密碼  mysql -uroot -p567
-h:             指定主機域  mysql -uroot -p567 -h127.0.0.1
-P:             指定埠    mysql -uroot -p567 -h127.0.0.1 -P3307
-S:             指定socket檔案 mysql -uroot -p567 -S socket檔案存放路徑
-e:             指定SQL語句(庫外執行SQL語句) mysql -uroot -p567 -e "show databases;"
--protocol:     指定連線方式 mysql --protocol=TCP  --protocol=socket

連線方式:
1. TCP/IP的連線方式
2. 套接字連線方式,socket連線
3. 預設使用socket方式連線
檢視方式:
在mysql命令列中輸入:status;
# 需要注意的是:
因為使用TCP/IP連線,需要建立三次握手
不一定-h都是tcp,-hlocalhost是socket連線
mysql -uroot -p -hlocalhost

MySQL配置檔案

MySQL配置檔案的作用是配置MySQL,使MySQL按照我們指定的方式健康執行

1.在執行mysql命令時,下列配置會生效,即mysql服務啟動時生效
[mysqld]
skip-grant-tables	# 跳過密碼驗證
port=3306
character_set_server=utf8
default-storage-engine=innodb
innodb_file_per_table=1

2.針對客戶端命令的全域性配置,當mysql客戶端命令執行時,下列配置生效
[client]
port=3306
default-character-set=utf8
user=root
password=123

3.只針對mysql這個客戶端的配置,2中的是全域性配置,而此處的則是隻針對mysql這個命令的區域性配置
[mysql]
port=3306
default-character-set=utf8
user=root
password=4573

# 如果沒有[mysql],則使用者在執行mysql命令時的配置以client為準

統一字符集編碼

統一字元編碼十分有必要,不統一字元編碼就會出現亂碼的問題

首先,我們可以修改系統的字符集編碼
LANG=us_EN.UTF-8
LANG=zh_CN.UTF-8
臨時修改報錯命令為英文:LANG=us_EN.UTF-8
# 永久修改系統字符集:
vim /etc/locale.conf
LANG=us_EN.UTF-8

我們可以在cmake的時候指定字符集
cmake .
-DDEFAULT_CHARSET=UTF8 \
-DDEFAULT_COLLATION=UTF8_GENERAL_CI

當然也可以在配置檔案中指定字符集
vim /etc/my.cnf
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
 
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
修改完畢後重啟服務
檢視修改的結果,在MySQL命令列中執行:
show variables like '%char%';

校驗規則:
utf8_general_ci
1. ci:大小寫不敏感
2. cs或bin:大小寫敏感
# 一個表裡不可能出現同名不同大小寫的欄位

# 檢視校驗規則:
show collation;

utf8和utf8mb4之間有什麼區別?
utf8不支援emoji表情而utf8mb4支援

我們還可以通過SQL語句指定字符集編碼
在MySQL命令列中輸入:create database db1 charset utf8mb4 collate utf8mb4_general_ci;

修改MySQL root密碼

修改root密碼是十分有必要的,在生產環境中要求我們隔一段時間就修改密碼
1.知曉root密碼的情況下修改密碼
# mysqladmin -uroot -p"舊密碼" password '新密碼'
# MySQL命令列中輸入:	# 前提是知曉原密碼並登入資料庫
alter user root@localhost identified by 'xxxxx';
FLUSH PRIVILEGES;

2.不知曉root密碼的情況下去修改密碼
# 修改配置檔案,在[mysqld]下加入一條命令
[mysqld]
skip_grant_tables	# 跳過授權表
systemctl stop mysqld
systemctl start mysqld
在MySQL命令列輸入:UPDATE mysql.user set authentication_string = PASSWORD ("xxxxxx") WHERE User = "root" and Host="localhost";
FLUSH PRIVILEGES;
# 密碼修改完畢後記得刪除配置檔案中的跳過授權表的命令
然後停止,重啟資料庫

3.遠端授權
grant all privileges on *.* to root@'%' identified by 'xxxxx';
flush privileges;

mysqladmin命令

1.修改密碼,設定密碼:passwd
mysqladmin -uroot -p舊密碼 password '新密碼'

2.關閉MySQL服務:shutdown
mysqladmin -uroot -p密碼 -S socket檔案路徑 shutdown

3.庫外建庫:create
mysqladmin -uroot -p密碼 create egon
mysql -uroot -p123456 -e 'create database egon'

4.庫外刪除資料庫:drop
mysqladmin -uroot -p123456 drop egon
輸入y/N

5.檢視配置檔案所有的預設引數:variables
mysqladmin -uroot -p123456 variables
mysqladmin -uroot -p123456 variables | grep server_id 

6.檢測MySQL程序是否存活:ping
mysqladmin -uroot -p123456 ping

7.檢視資料庫 慢查詢,負載資訊:status
mysqladmin -uroot -p123456 status
Uptime                   MySQL伺服器已經執行的秒數
Threads                  活躍執行緒(客戶)的數量 
Questions                從mysqld啟動起來自客戶問題的數量   已經發送給伺服器的查詢的個數
Slow queries             已經超過long_query_time秒的查詢數量 
Opens                    mysqld已經打開了多少表 
Flush tables             flush ..., refresh和reload命令數量 
Open tables              現在被開啟的表數量
Queries per second avg: 0.046   負載

8.過載授權表,重新整理快取主機:reload,相當於flush privileges
mysqladmin -uroot -p123456 reload

9.重新整理binlog日誌
mysqladmin -uroot -p123456 flush-log