openshell 的个人博客 openshell 的个人博客

一天很长,但十年很短。

目录
Mysql 8.0.19 安装
/  

Mysql 8.0.19 安装

MySQL 安装、备份

记录MySQL在不同环境安装及备份的问题。

Windows下安装

1.下载
官网下载:https://dev.mysql.com/downloads/mysql/
我这里选择的是Windows (x86, 64-bit), ZIP Archive
2. 配置初始化
解压后路径为:C:\soft\mysql-8.0.19-winx64,路径下新建 my.ini 配置文件。
打开 cmd,进入 MySQL 的 bin 目录
cd C:\soft\mysql-8.0.19-winx64\bin
初始化 MySQL
mysqld --initialize --console
执行命令后,可以看到初始密码,没改密码前最好记住这个密码。
mysql安装.png

有两点需要注意:

  • 请使用管理员身份运行 cmd
  • basedir 和 datadir 的路径需要反斜杠写,否则报错:mysqld: Can't create directory 'C: oft\mysql-8.0.19-winx64\data\' (OS errno 2 - No such file or directory)mysql安装.png
    从图上明显看到有个字母被吞了,说明需要转义。
  • 安装mysql时报错: 由于找不到vcruntime140_1.dll,无法继续执行代码
    我很反感遇到VC报错就重装VC库之类的操作,终于在网上找到一个可以搜索确实dll文件的网站:https://cn.dll-files.com/
    在该网站上搜索缺失的dll放入C:\Windows\System32即可
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=C://soft//mysql-8.0.19-winx64
# 设置mysql数据库的数据的存放目录
datadir=C://soft//mysql-8.0.19-winx64//data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
  1. MySQL 服务安装与启动
    安装命令mysqld --install
    服务器启动命令net start mysql
    登入 MySQLmysql -uroot -plMsD(eNQu0dt

密码重置

  1. 管理员身份进入 dos
  2. 停止 MySQL 服务net stop mysql
  3. 无密码启动mysqld --console --skip-grant-tables --shared-memory
  4. 另启一个 dos 窗口,无密码登录mysql -uroot
  5. 清空密码update mysql.user set authentication_string='' where user='root' and host='localhost'
  6. 重启服务
    关掉刚刚打开的两个窗口,重新启动服务net start mysql
  7. 无密码登录
    MySQL -u root
    8.修改密码ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

Linux下安装

拉取最新镜像

docker pull mysql:8.0.13

创建文件夹

mkdir -p /dockerDate/mysql

运行镜像

docker run --restart=always --name=mysql8.0 --privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 \
-v  /dockerData/mysql/:/etc/mysql \
-d mysql:8.0.13

此时发现容器死活起不来,日志报错:

mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
2020-11-22T12:54:58.026377Z 0 [ERROR] [MY-010095] [Server] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
2020-11-22T12:54:58.028767Z 0 [ERROR] [MY-010119] [Server] Aborting

原因是当指定了外部配置文件与外部存储路径时,也需要指定 /var/lib/mysql-files的外部目录。

于是修改命令为:

docker run --restart=always --name=mysql8.0 --privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 \
-v /dockerData/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /dockerData/mysql/conf/conf.d/:/etc/mysql/conf.d/ \
-v /dockerData/mysql/logs:/logs \
-v /dockerData/mysql/mysql-files:/var/lib/mysql-files/ \
-d mysql:8.0.13

参数解释:

--restart=always                                            -> 开机启动容器,容器异常自动重启
--privileged=true                                           -> 使container内的root拥有真正的root权限
-e MYSQL_ROOT_PASSWORD=123456                               -> 写入配置root密码
-v /dockerData/mysql/conf/my.cnf:/etc/mysql/my.cnf \        -> 映射配置文件
-v /dockerData/mysql/conf/conf.d/:/etc/mysql/conf.d/ \      -> 映射配置文件夹
-v /home/app/mysql/logs:/logs                               -> 映射日志
-v /home/app/mysql/data/mysql:/var/lib/mysql                -> 映射数据
-p 3306:3306                                                -> 绑定宿主机端口
--name=mysql8.0                                                -> 指定容器名称
-d                                                          -> 以守护进程的方式启动容器

备份及恢复

备份

备份所有数据库:

mysqldump -uroot -p --all-databases > /mysql_dump.sql 

备份指定数据库:

mysqldump -uroot -p123456 test > /mysql_dump.sql 

备份指定数据库指定表

法一:

mysqldump -uroot -p123456  mysql test > /mysql_dump.sql

法二:

mysql -e "show databases;" -uroot -p123456| grep -Ev "Database|information_schema|mysql|test|performance_schema|sys" | xargs mysqldump -uroot -p123456 --single-transaction --databases > /mysql_dump.sql 

命令解释:

由于 mysqldump命令仅支持单表忽略,不支持忽略整个数据库,所以通过上面命令过滤掉不需要备份的数据库。

恢复

mysql -u root -p123456 < /mysql_dump.sql

标题:Mysql 8.0.19 安装
作者:openshell
地址:http://blog.caiqz.cn/articles/2020/04/07/1586238515605.html