记录MySQL在不同环境安装及备份的问题。
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
执行命令后,可以看到初始密码,没改密码前最好记住这个密码。
有两点需要注意:
mysqld: Can't create directory 'C: oft\mysql-8.0.19-winx64\data\' (OS errno 2 - No such file or directory)
[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
mysqld --install
net start mysql
mysql -uroot -plMsD(eNQu0dt
密码重置
net stop mysql
mysqld --console --skip-grant-tables --shared-memory
mysql -uroot
update mysql.user set authentication_string='' where user='root' and host='localhost'
net start mysql
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
拉取最新镜像
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