MySQL - 各平台安装MySQ

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 |

posted @ 2019-12-05 08:23  silencio。  阅读(438)  评论(0编辑  收藏  举报