download
這里先告訴大家怎么下載MySQL。
打開官網下載地址:https://downloads.mysql.com/archives/community/,按照截圖所示下載即可。
Windows
centos
for centos
centos7.3 + mysql5.7.20
官網下載地址:https://downloads.mysql.com/archives/community/
百度雲盤:鏈接:https://pan.baidu.com/s/1ipuTky_oAgMzrZ-wf1GJgA 提取碼:b0gu
接下來演示在一台服務器上配置單個實例和多個實例的配置。
所謂單實例,就是在一個系統中安裝一個MySQL服務,多實例,就是在一個系統中安裝多個MySQL服務。
單實例配置
在安裝之前,如果你的系統曾經安裝過mariadb,請先卸載。
yum remove mariadb*
好了,開始吧!
install
- 安裝依賴包:
yum install -y epel-release
yum update -y
yum install -y cmake gcc-c++ ncurses-devel perl-Data-Dumper boost-doc boost-devel libaio-devel
- 下載、解壓縮、重命名,當然,你也可以把原來的壓縮包刪除掉:
[root@cs ~]# cd /opt/
[root@cs opt]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@cs opt]# tar -xvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@cs opt]# mv mysql-5.7.20-linux-glibc2.12-x86_64 mysql
[root@cs opt]# rm -rf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@cs opt]# ls
mysql
- 添加環境變量:
[root@cs opt]# vim /etc/profile
# 添加如下內容
export PATH=/opt/mysql/bin:$PATH
# 然后source生效
[root@cs opt]# source /etc/profile
- (如果已有請忽略)建立mysql用戶組,該用戶用來管理MySQL:
[root@cs opt]# useradd mysql
- 創建相關目錄並授權:
[root@cs opt]# mkdir /data/mysql -p
[root@cs opt]# chown -R mysql:mysql /opt/mysql/*
[root@cs opt]# chown -R mysql:mysql /data/*
其中:
/opt/mysql/
是MySQL軟件所在目錄。/data/mysql
是將來存放MySQL數據的目錄。
- 初始化數據庫:
# 保證/data/mysql/目錄是空的,避免不必要的問題
rm -rf /data/mysql/*
mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/data/mysql
[root@cs opt]# rm -rf /data/mysql/*
[root@cs opt]# mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/data/mysql
2020-06-08T01:25:34.199239Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-06-08T01:25:34.357149Z 0 [Warning] InnoDB: New log files created, LSN=45790
2020-06-08T01:25:34.381441Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2020-06-08T01:25:34.436113Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: f352c664-a926-11ea-a90d-000c29872edd.
2020-06-08T01:25:34.437057Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2020-06-08T01:25:34.438213Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
上述參數,並不難理解:
--initialize-insecure
,表示不安全的初始化。這個參數來自於--initialize
參數,在MySQL5.7版本中,在初始化成功后,會生成一個臨時密碼,相對比較麻煩,所以這里改為--initialize-insecure
,初始化時將root用戶的登錄密碼設置為空。--user=mysql
,管理MySQL的用戶是mysql
。--basedir=/opt/mysql
,是你MySQL的安裝目錄。--datadir=/data/mysql
,是管理數據的目錄。
在初始化完成后,你的MySQL的數據目錄,應該有這些文件:
[root@CS opt]# ll /data/mysql/
總用量 110628
-rw-r----- 1 mysql mysql 56 11月 27 14:21 auto.cnf
-rw-r----- 1 mysql mysql 419 11月 27 14:21 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 11月 27 14:21 ibdata1
-rw-r----- 1 mysql mysql 50331648 11月 27 14:21 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 11月 27 14:21 ib_logfile1
drwxr-x--- 2 mysql mysql 4096 11月 27 14:21 mysql
drwxr-x--- 2 mysql mysql 8192 11月 27 14:21 performance_schema
drwxr-x--- 2 mysql mysql 8192 11月 27 14:21 sys
- 編寫配置文件,編輯
vim /etc/my.cnf
,內容如下:
[mysqld]
user=mysql
basedir=/opt/mysql
datadir=/data/mysql
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
prompt=3306 [\\d]>
prompt
參數為登錄進MySQL客戶端的提示信息,當你use
到指定的數據庫中,該庫名將顯示在中括號內。
啟動MySQL的幾種方式
mysql.server
我們可以使用MySQL自帶的mysql.server啟動MySQL服務。
mysql.server在哪呢?在MySQL安裝目錄中的support-files
目錄中:
[root@CS opt]# cd /opt/mysql/support-files/
[root@CS support-files]# ls
magic mysqld_multi.server mysql-log-rotate mysql.server
我們用mysql.server來管理MySQL:
[root@CS support-files]# ./mysql.server start
Starting MySQL.Logging to '/data/mysql/CS.err'.
SUCCESS!
[root@CS support-files]# ./mysql.server restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[root@CS support-files]# ./mysql.server stop
Shutting down MySQL.. SUCCESS!
配置service啟動
在centos6中使用service管理服務,所以,我們來演示下如何使用service來管理MySQL服務:
[root@cs opt]# cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@CS opt]# service mysqld start
Starting MySQL. SUCCESS!
[root@CS opt]# service mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL.
[root@CS opt]# service mysqld stop
Shutting down MySQL.. SUCCESS!
配置systemctl
在centos7版本中,可以使用systemctl來替代service了。
編輯vim /etc/systemd/system/mysqld.service
文件,內容如下:
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://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=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
編輯內容中,只需要將ExecStart=/opt/mysql/bin/mysqld
的路徑改為你的MySQL安裝目錄即可,其他的照抄。
完事之后,你就可以使用systemctl命令來管理MySQL服務了,可用命令:
systemctl start mysqld
systemctl restart mysqld
systemctl stop mysqld
systemctl status mysqld
systemctl enable mysqld
此時,你可以在任意位置執行mysql
來進入MySQL客戶端了,但是此時登錄還不要密碼。
創建密碼
此時,我們能正常的啟動/停止MySQL服務了,但在初始化MySQL的時候,我們還沒有配置登錄密碼,現在,我們來創建密碼。
為root用戶(該用戶為本地用戶)創建密碼:
mysqladmin -uroot -p password 123
-p password
后面跟你要為root用戶設置的密碼。
(可選)查看MySQL監聽端口:
netstat -lnp|grep 3306
ss -lnp|grep 3306
ps -ef|grep mysqld
參考:老男孩-標桿班級-MySQL-lesson01-簡介及安裝
多實例配置
see also:https://www.cnblogs.com/Neeo/articles/13527500.html
可能的報錯
報錯:
[root@CS opt]# mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql/ --datadir=/data/mysql/
2020-11-27T13:53:03.278392Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-11-27T13:53:03.280038Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2020-11-27T13:53:03.280083Z 0 [ERROR] Aborting
原因:提示你數據目錄有文件,而初始化的過程中需要保證數據目錄為空。
解決:
[root@CS opt]# rm -rf /data/mysql/*
[root@CS opt]# mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql/ --datadir=/data/mysql/
for windows
win10 + mysql-5.7.20-winx64.zip
在Windows平台,有兩種方式安裝MySQL,zip包和msi兩種,我這里推薦以zip包的形式安裝。
但我也貼出來我之前寫的msi的安裝教程:https://www.cnblogs.com/Neeo/p/9438442.html
接下來,演示zip包的MySQL安裝。
安裝
install
下載到本地的安裝包是zip包,選擇一個指定目錄進行解壓,解壓的過程就是安裝的過程,解壓后的位置就是MySQL的安裝位置。
注意,安裝目錄不允許有中文、空格和其他特殊字符。
如下截圖,我將MySQL解壓並安裝到C盤的根目錄:
配置環境變量
拷貝安裝目錄內的bin路徑,並將其添加到系統的環境變量中。
執行初始化
在任意路徑下,以管理員的身份打開終端執行:
mysqld --initialize-insecure
--initialize-insecure
,表示不安全的初始化。這個參數來自於--initialize
參數,在MySQL5.7版本中,在初始化過程中,會生成一個臨時密碼(臨時密碼文件在data目錄內的"你的主機名.err"文件),后續處理相對麻煩,所以這里改為--initialize-insecure
,初始化時將root用戶的登錄密碼設置為空。
注意,如果報錯:提示缺少MSVCP120.dll文件的話,后面有解決辦法。
初始化成功如下圖:
初始化成功的另一個標志是,在MySQL的安裝目錄中,會多個data目錄,這個data目錄是是MySQL在初始化過程中創建的數據目錄。
如果你沒有發現data目錄,說明初始化過程有些問題,重新以管理員的身份打開終端執行初始化命令:
如上圖中的ERROR報錯,說初始化過程中,data目錄內存在文件,初始化被終止。這是因為之前初始化成功了,data目錄被創建,期內也有了文件。
當然有了這些提示,說明整個初始化過程成功了。
添加MySQL服務到系統的服務中並啟動MySQL
這一步是將MySQL服務添加到系統的服務中,並且設置為自動。然后,我們就可以使用net命令來管理MySQL服務了。注意,也必須是在以管理員身份運行的終端中才能使用net命令管理MySQL服務。
mysqld --install
現在系統的服務中就可以找到MySQL了。
但此時MySQL服務還沒有啟動,你可以在服務中點擊啟動,也可以在終端中使用net命令來啟動/關閉MySQL服務。
ok,現在MySQL服務正常啟動了,並且,由於系統服務中的MySQL服務設置的是自動,下次系統啟動時,MySQL服務也默認啟動了。
測試
當MySQL服務正常啟動后,我們就可以嘗試使用客戶端連接並操作MySQL了。
PS:后續使用客戶端連接M操作MySQL時,終端就沒有"以管理員身份運行終端"這個要求了,普通終端也可以。
創建密碼
以管理員的身份打開終端執行:
mysqladmin -uroot -p password 123
ok,在Windows平台安裝MySQL完事了。
可能的報錯
缺少MSVCP120.dll文件
當執行初始化的時候,提示缺少MSVCP120.dll文件。
報錯原因是,系統缺少Visual C ++可再發行組件包。
擴展:什么是Visual C ++可再發行組件包?
Visual C ++可再發行組件是使用Microsoft的Visual Studio軟件開發環境構建的程序或游戲所需的DLL(動態鏈接庫)文件。當程序需要DLL或其他支持文件才能運行時,這稱為依賴項。
原文鏈接:https://www.groovypost.com/howto/fix-visual-c-plus-plus-redistributable-windows-10/
解決辦法
-
打開microsoft官網:https://www.microsoft.com/en-us/download/details.aspx?id=40784,點擊下載:
-
根據系統位數選擇下載:
-
以管理員的身份運行,然后默認安裝即可。
-
重新以管理員身份打開終端,重新執行初始化步驟吧!
mysqld --initialize-insecure
for docker
centos7.9 + docker20.10.3
- 拉取鏡像:
# docker search mysql
# docker pull mysql:5.5
# docker pull mysql:5.6
docker pull mysql:5.7
- 創建容器並啟動,這里有兩種啟動方式。
第一種,臨時使用,刪除容器之后,就什么也沒有了:
docker run --name mysql -p 3338:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.6
--name mysql
,指定容器名稱。-p 3338:3306
,3308表示宿主機的對外端口,3306是MySQL容器的運行端口。-e MYSQL_ROOT_PASSWORD=123
,為MySQL的root用戶設置密碼。
第二種,持久化數據到本地,刪除容器,本地數據還在:
docker run --name mysql -p 3338:3306 -v /mysql/data:/data/mysql_docker -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
-v /mysql/data:/data/mysql_docker
,將容器中的/mysql/data
掛在到宿主機的/data/mysql_docker
目錄,達到持久化的目的。
- (可選),進入容器的交互式環境:
docker exec -it mysql bash
你也可以通過容器的對外端口進行遠程訪問:
宿主機IP:MySQL容器對外暴露的端口
10.0.0.200:3338
歡迎斧正,that's all,see also: