MySQL - 各平台安装MySQ
download#
这里先告诉大家怎么下载MySQL。
打开官网下载地址:https://downloads.mysql.com/archives/community/,按照截图所示下载即可。
Windows
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: