mysql MySQL二進位制安裝及原始碼包安裝
阿新 • • 發佈:2022-04-20
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