MySQL - 各平台安裝MySQL


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

  1. 安裝依賴包:
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
  1. 下載、解壓縮、重命名,當然,你也可以把原來的壓縮包刪除掉:
[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
  1. 添加環境變量:
[root@cs opt]# vim /etc/profile
# 添加如下內容
export PATH=/opt/mysql/bin:$PATH
# 然后source生效
[root@cs opt]# source /etc/profile
  1. (如果已有請忽略)建立mysql用戶組,該用戶用來管理MySQL:
[root@cs opt]# useradd mysql
  1. 創建相關目錄並授權:
[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數據的目錄。
  1. 初始化數據庫:
# 保證/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
  1. 編寫配置文件,編輯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/
解決辦法

  1. 打開microsoft官網:https://www.microsoft.com/en-us/download/details.aspx?id=40784,點擊下載:

  2. 根據系統位數選擇下載:

  3. 以管理員的身份運行,然后默認安裝即可。

  4. 重新以管理員身份打開終端,重新執行初始化步驟吧!

mysqld --initialize-insecure

for docker

centos7.9 + docker20.10.3

  1. 拉取鏡像:
# docker search mysql
# docker pull mysql:5.5
# docker pull mysql:5.6
docker pull mysql:5.7
  1. 創建容器並啟動,這里有兩種啟動方式。

第一種,臨時使用,刪除容器之后,就什么也沒有了:

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目錄,達到持久化的目的。
  1. (可選),進入容器的交互式環境:
docker exec -it mysql bash

你也可以通過容器的對外端口進行遠程訪問:

宿主機IP:MySQL容器對外暴露的端口

10.0.0.200:3338

歡迎斧正,that's all,see also:

Docker 安裝mysql5.6 |


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM