写最好的Docker安装最新版MySQL8(mysql |
您所在的位置:网站首页 › 怎么更新mysql版本 › 写最好的Docker安装最新版MySQL8(mysql |
一、前言
MySQL官方安装包下载地址: https://dev.mysql.com/downloads/mysql/ Docker Hub官方网址: https://hub.docker.com/ 如果需要了解Centos7下MySQL5.7最新版的安装部署,可参考教程【最新MySQL-5.7.40在云服务器Centos7.9安装部署)】。 本教程是笔者参考Docker Hub和MySQL官方文档,经过多次操作,踩坑无数才撰写出来的,内容不能说是全网最好,但绝对不会很差,起码比网上很多博文要详细得多。例如配置编码集参数解决中文乱码问题,本教程中有多种方法处理,其它博文可能就只写一种。Docker中安装MySQL8容器,要注意的细节很多,比安装MySQL5.7要麻烦得多! 笔者毕竟专业技能有限,文中的某些描述或者操作如果有错误,可以评论指出或加关注 @大白有点菜 讨论,大家互相学习进步。 本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错,请点点赞,加关注,谢谢! 二、安装部署1、在Docker Hub中搜索关键字“mysql”,查看MySQL的最新稳定版,包含MySQL8和MySQL5.7系列。对应的MySQL页面有教程,读者也可自行去看,但是不是很完整,笔者的教程参考官网且有改动。 (1)Docker Hub中搜索“mysql”。 (2)选择官方的“mysql”。页面是MySQL在Docker中的版本的相关介绍,这里有这么一个规律:8.0.31, 8.0, 8, latest, 8.0.31-oracle, 8.0-oracle, 8-oracle, oracle 其实都是同一个版本,它们的镜像ID都是相同,在页面中放在同一行展示的,都是同一个版本,笔者验证过。页面同时也有操作教程,并不是很全,只给出核心操作步骤。 Docker Hub中MySQL介绍:https://hub.docker.com/_/mysql 2、切换到“Tags”页面,官方列出了最新的版本和对应的命令,例如 docker pull mysql:latest ,拉取MySQL最新的版本。其实简写 docker pull mysql ,mysql后面不同带版本号,等同于latest版,后面教程会验证。3、回归正题,先创建三个目录,创建MySQL容器时会挂载为容器的卷(Volume),用于Docker和宿主机(Centos)之间共享文件,包括配置文件、数据文件和日志文件。 什么是卷(Volume)?命令 docker -v 中的“-v”就是这个卷,“-v”只是“--volume”的简写。 Docker官方文档解释卷的含义:https://docs.docker.com/storage/volumes/ 使用 -p 创建多级目录,即 mydata 目录下创建 mysql 目录, mysql 目录下又创建 log 、data 、conf 三个目录: mkdir -p /mydata/mysql/log mkdir -p /mydata/mysql/data mkdir -p /mydata/mysql/conf4、拉取MySQL镜像,可以看到,拉取的tag就是“latest”。 docker pull mysql 5、创建容器前先了解一些前置知识点,更好地理解操作过程的一些参数配置。 (1)Docker Hub官方教程文档中提到两种方式去运行新容器:【使用自定义的 .cnf 配置文件】和【配置选项作为标志传递给mysqld,不用写xxx.cnf配置文件】。 (2)【重要】了解必要的前置知识点,因为后面步骤配置用到的一些参数就以此有关:MySQL8.0容器中,Server 和 Client 都有默认的字符集。Client相关的字符集如果不为 utf8mb4 的话,连接Server查看表中数据,中文就显示为乱码。 1)与 Client 相关的配置:character_set_client、character_set_connection、character_set_results 、collation_connection。可以看到,前三个默认字符集(character)的值为 latin1,最后一个排序规则(collation)的值默认为 latin1_swedish_ci 。连接 Server 时查看表数据,中文当然会显示乱码了。 show variables like 'char%'; show variables like 'collation%';
2)与 Server 相关的配置:character_set_database、character_set_server、collation_database 、collation_server。可以看到,前两个默认字符集(character)的值为 utf8mb4,最后两个排序规则(collation)的值默认为 utf8mb4_0900_ai_ci ,就是说MySQL8中 Server 配置默认的字符集就是 utf8mb4 。 show variables like 'char%'; show variables like 'collation%';3)“utf8_unicode_ci” 和“utf8mb4_general_ci”接触得比较多,但“utf8mb4_0900_ai_ci”又是什么? 三者都是MySQL的utf8编码默认的排序规则,MySQL官网文档中介绍到:MySQL 5.7 和 8.0 之间的默认排序规则utf8mb4不同(5.7版是 utf8mb4_general_ci, 8.0版是 utf8mb4_0900_ai_ci )。 utf8编码:MySQL5.7默认排序规则为 utf8_unicode_ciutf8mb4编码:MySQL5.7默认排序规则为 utf8mb4_general_ci ,MySQL8.0默认排序规则为 utf8mb4_0900_ai_ci【MySQL 5.7 和 8.0 之间的默认排序规则utf8mb4不同,附谷歌翻译截图】: https://dev.mysql.com/doc/refman/8.0/en/charset-connection.html#charset-connection-system-variables 【MySQL8.0服务器字符集和排序规则,附谷歌翻译截图】: https://dev.mysql.com/doc/refman/8.0/en/charset-server.html 【MySQL5.7服务器字符集和排序规则,附谷歌翻译截图】: https://dev.mysql.com/doc/refman/5.7/en/charset-server.html 【MySQL8.0支持的字符集和默认排序规则,移除了 utf8,新增了 utf8mb3,保留 utf8mb4 ,附谷歌翻译截图】: https://dev.mysql.com/doc/refman/8.0/en/charset-charsets.html 【MySQL5.7支持的字符集和默认排序规则,有 utf8 和 utf8mb4 ,附谷歌翻译截图】: https://dev.mysql.com/doc/refman/5.7/en/charset-charsets.html 6、方法一创建容器:将配置选项作为标志传递给mysqld,不用写xxx.cnf配置文件。执行以下命令,创建一个 mysql 容器并指定目录挂载为容器的卷,设置客户端字符集: docker run --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql --init-connect="SET collation_connection=utf8mb4_0900_ai_ci" --init-connect="SET NAMES utf8mb4" --skip-character-set-client-handshake以上命令的参数又是什么意思呢?使用 docker run --help 查看各参数的含义: docker run --help
--name 容器名称。 -v 参数 -v 是 --volume list 的简写,将指定的文件夹挂载为容器的卷(Volume),用来共享文件(日志文件、配置文件、数据文件)。 /mydata/mysql/log 日志目录。 /mydata/mysql/data 数据目录。 /mydata/mysql/conf 配置文件目录。 -p 3306:3306 参数 -p 是 --publish list 的简写,将3306端口映射到容器的3306端口,对外提供端口。如果同时启动多个mysql容器,对外端口号可以不同,服务之间不会冲突。 -e MYSQL_ROOT_PASSWORD=123456 参数 -e 是 --env list 的简写,设置环境变量,将 root 用户的密码变量(MYSQL_ROOT_PASSWORD)设置为 123456。 -d mysql 参数 -d 是 --detach 的简写,指的是容器运行在后台并打印容器ID。后面的mysql可以加版本号,例如mysql:latest、mysql:8.0.31 等等。 --init-connect="SET collation_connection=utf8mb4_0900_ai_ci" Client初始化连接Server时,将 collation_connection 排序规则的值设置为 utf8mb4_0900_ai_ci 并作为标志传递给 mysqld 。相当于my.cnf配置文件下,[mysqld]位置下添加 init-connect=“SET collation_connection=utf8mb4_0900_ai_ci” 参数。 --init-connect="SET NAMES utf8mb4" Client初始化连接Server时,设置系统变量 NAMES 的值为 utf8mb4 并作为标志传递给 mysqld 。在MySQL官方文档介绍中,设置 NAMES 的字符集,就是给三个会话系统变量 character_set_client、character_set_connection、character_set_results 设置一样的字符集。相当于my.cnf配置文件下,[mysqld]位置下添加 init-connect=“SET NAMES utf8mb4” 参数。 --skip-character-set-client-handshake 相当于my.cnf配置文件下,【mysqld】位置下添加 skip-character-set-client-handshake 参数。–character-set-client-handshake 的一个开关,用来忽略客户端信息并使用默认服务器字符。官方文档中描述到,在MySQL 4.0版中,服务器和客户端都有一个“全局”字符集,服务器管理员决定使用哪个字符。但MySQL4.1之后,客户端连接服务器时,是有 handshake(握手)的【官方文档地址:连接字符集和排序规则】。 MySQL4.1之后版本,当客户端连接时,它想发送指定的字符集给服务端来设置 character_set_client、character_set_connection、character_set_results 这三个系统变量,当 mysqld 以 –character-set-server=utf8 这种配置启动时,是无法控制客户端字符集设置的,但MySQL4.0是可以这么做的,为了保留MySQL4.0这种行为,–character-set-client-handshake 开关就诞生了。 【设置 NAMES 的字符集,附谷歌翻译截图】: https://dev.mysql.com/doc/refman/8.0/en/set-names.html 【“–skip-character-set-client-handshake”官方文档介绍,附谷歌翻译截图】: https://dev.mysql.com/doc/refman/8.0/en/faqs-cjk.html https://dev.mysql.com/doc/refman/8.0/en/server-options.html#option_mysqld_character-set-client-handshake 7、方法二创建容器:使用自定义的 custom.cnf 配置文件。(1)在 /mydata/mysql/conf/ 目录下创建自定义的 custom.cnf 配置文件。文件名随意,文件格式必须为 .cnf 。 vim /mydata/mysql/conf/custom.cnfMySQL默认配置文件 /etc/my.cnf 末尾中有这么一行:!includedir /etc/mysql/conf.d/ ,意思是,在 /etc/mysql/conf.d/ 目录下新建自定义的配置文件 custom.cnf也会被读取到,而且还是优先读取的(Docker Hub中的MySQL教程文档有说到)。
(2)添加容器运行的配置参数。 [mysqld] init-connect="SET collation_connection=utf8mb4_0900_ai_ci" init_connect="SET NAMES utf8mb4" skip-character-set-client-handshake(3)创建容器并运行。一些参数在【方法一创建容器】里面有说明,这里不再细说。 docker run --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql8、禁用 root 账户被外部工具连接。 进入到容器里,连接mysql,删除mysql数据库user表中 user=“root”,host="%"的那条记录。因为这条数据会允许 root 账户被允许外部工具(如Navicat或SQLyog)连接,实际上,应该禁止这么做,正确做法是只允许 root 账户本地连接。如果想 root 账户继续被外部工具连接,那就把root密码设置得更复杂,过于简单不安全! 切换到 mysql 数据库: use mysql;删除mysql数据库user表中 user=“root”,host="%"的那条记录: delete user from mysql.user where user='root' and host='%';刷新权限: flush privileges;9、创建新账户供外部工具连接。可参考文章【如何优雅地创建MySQL账户供外部工具连接】。 (1)使用 CREATE 创建账户,例如对应mysql.user表中,字段user为 zyt ,字段host为 % ,账号密码为 dbydc&666 ,“%”代表任何主机。使用 GRANT 授予账户特定权限。 1)创建用户和密码 CREATE USER 'zyt'@'%' IDENTIFIED BY 'dbydc&666';或 create user 'zyt'@'%' identified by 'dbydc&666';2)授予账户特定权限。ALL 和 ALL PRIVILEGES 是一样的,可简写为 ALL 。 GRANT ALL ON *.* TO 'zyt'@'%' WITH GRANT OPTION;或 grant all on *.* to 'zyt'@'%' with grant option;(2)刷新账号权限。 FLUSH PRIVILEGES;或 flush privileges;(3)使用Navicat工具测试连接,账户“zyt”是正常连接的。 10、设置容器自启动。 docker update --restart=always mysql 11、容器的启动、停止、删除、重新启动、查看运行状态。 (1)启动容器 docker start mysql或 docker start 容器ID(2)停止容器 docker stop mysql或 docker stop 容器ID(3)删除容器 docker rm mysql或 docker rm 容器ID(4)重新启动容器 docker restart mysql或 docker restart 容器ID(5)查看容器运行状态 查看所有容器的运行状态,包括运行的和停止的: docker ps -a查看所有运行中的容器的状态,不包括停止的: docker ps12、创建数据库并验证功能。 (1)创建 dbydc 数据库,数据表为 tb_account 和 tb_user。 -- MySQL dump 10.13 Distrib 8.0.31, for Linux (x86_64) -- -- Host: localhost Database: dbydc -- ------------------------------------------------------ -- Server version 8.0.31 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!50503 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Current Database: `dbydc` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `dbydc` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; USE `dbydc`; -- -- Table structure for table `tb_account` -- DROP TABLE IF EXISTS `tb_account`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `tb_account` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '账户名称', `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '密码', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `tb_account` -- LOCK TABLES `tb_account` WRITE; /*!40000 ALTER TABLE `tb_account` DISABLE KEYS */; INSERT INTO `tb_account` VALUES (1,'zyt','123456'),(2,'君莫笑','654321'); /*!40000 ALTER TABLE `tb_account` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `tb_user` -- DROP TABLE IF EXISTS `tb_user`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `tb_user` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '姓名', `age` int DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `tb_user` -- LOCK TABLES `tb_user` WRITE; /*!40000 ALTER TABLE `tb_user` DISABLE KEYS */; INSERT INTO `tb_user` VALUES (1,'大白有点菜',18),(2,'CSDN新人',20); /*!40000 ALTER TABLE `tb_user` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2022-11-18 4:02:16(2)创建 dbydc2 数据库,数据表为 tb_user。 -- MySQL dump 10.13 Distrib 8.0.31, for Linux (x86_64) -- -- Host: localhost Database: dbydc2 -- ------------------------------------------------------ -- Server version 8.0.31 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!50503 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Current Database: `dbydc2` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `dbydc2` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; USE `dbydc2`; -- -- Table structure for table `tb_user` -- DROP TABLE IF EXISTS `tb_user`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `tb_user` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '姓名', `age` int DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `tb_user` -- LOCK TABLES `tb_user` WRITE; /*!40000 ALTER TABLE `tb_user` DISABLE KEYS */; INSERT INTO `tb_user` VALUES (1,'大白有点菜666',20),(2,'CSDN新人666',22); /*!40000 ALTER TABLE `tb_user` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2022-11-19 2:33:53(3)在不进入容器的情况下查询数据库的表数据。 通过 shell 方式运行mysql,-e 参数后面加上要执行的指令,等同于mysql连接后输入的指令一样。此处先切换到 dbydc 数据库,再查询 tb_account 和 tb_user 两个数据表的所有数据。 docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "use dbydc;" -e "select * from tb_account;" -e "select * from tb_user;"'还有另外一种写法,就是不用执行 “use dbydc;”这条指令去切换数据库,直接在 “select * from tb_account;” 后面加 dbydc 数据库即可。 docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "select * from tb_account;" dbydc -e "select * from tb_user;"'插入数据的语法是怎么写的呢?SQL语句 insert into tb_user(name,age) values("西门吃鸡", 36); 中有双引号,需要使用斜杠“\”来转义。 docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "use dbydc;" -e "insert into tb_user(name,age) values(\"西门吃鸡\", 36);" -e "select * from tb_user;"'13、MySQL数据库备份。 MySQL官方文档备份数据库: https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_databases (1)创建数据备份目录 db_backup mkdir -p /mydata/db_backup(2)备份所有数据库。参数 --all-databases 代表所有数据库。备份sql文件名称随意,如 all-databases.sql 。 docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /mydata/db_backup/all-databases.sql(3)同时备份多个指定的数据库。参数 --databases 后面可以指定数据库名称,支持1个或以上。备份sql文件名称随意,如 multi-databases.sql 。 docker exec mysql sh -c 'exec mysqldump --databases dbydc dbydc2 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /mydata/db_backup/multi-databases.sql(4)备份一个数据库。这里有两种方式,但是,只有加了参数 --databases 才能被正确地还原! 1)有参数 --databases ,可以被还原,最好使用这种方式。 docker exec mysql sh -c 'exec mysqldump --databases dbydc -uroot -p"$MYSQL_ROOT_PASSWORD"' > /mydata/db_backup/dbydc.sql2)无参数 --databases ,不能被还原,不要使用这种方式。MySQL官网有写到可以这么做,但是经过笔者验证和查询官网资料,这方式无法达到还原效果。笔者的专业技能有限,可能是支持还原的,但暂时写不出来这样的指令。 docker exec mysql sh -c 'exec mysqldump dbydc -uroot -p"$MYSQL_ROOT_PASSWORD"' > /mydata/db_backup/dbydc.sql笔者试过以下的指令去还原数据,但是发现,根本行不通: docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "use dbydc;"' /mydata/db_backup/tb_user.sql14、MySQL数据库还原。 (1)还原所有数据库。 docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |