MySQL数据库初始化

一、mysqld –initialize –console命令介绍

mysqld –initialize –console命令用于生成一个全新的MySQL数据目录,并且创建root账户的默认密码,该密码将会在日志中输出。

二、mysqld –initialize –console命令使用

1、生成全新的MySQL数据目录

使用mysqld –initialize –console命令生成全新的MySQL数据目录,示例如下:

$ mysqld --initialize --console
2020-04-05T01:25:29.822188Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.19) initializing of server in progress as process 3342
2020-04-05T01:25:29.824964Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
2020-04-05T01:25:29.826628Z 0 [ERROR] [MY-013236] [Server] Newly created data directory /var/lib/mysql/ is unusable. You can safely remove it.

如果全新的MySQL数据目录已经存在,将会输出以上错误信息。

如果全新的MySQL数据目录不存在,将会输出以下类似的信息:

$ mysqld --initialize --console
2020-04-05T01:08:33.765043Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.19) initializing of server in progress as process 3037
2020-04-05T01:08:33.853206Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: GCPsO1G[s4&6
2020-04-05T01:08:38.226778Z 0 [System] [MY-013170] [Server] /usr/sbin/mysqld (mysqld 8.0.19) initialization completed successfully (log sequence number 0).

以上信息表示MySQL数据目录初始化成功,并生成了root账户的默认密码:GCPsO1G[s4&6。

2、修改MySQL数据目录位置

使用mysqld –initialize –console命令时,默认MySQL数据目录为/var/lib/mysql,可以通过–datadir参数来指定MySQL数据目录位置,示例如下:

$ mysqld --initialize --console --datadir=/data/mysql

以上命令将会在/data/mysql目录下生成全新的MySQL数据目录。

三、mysqld –initialize –console命令原理

mysqld –initialize –console命令执行原理如下:

1、生成临时密码

执行命令时,MySQL服务器会生成一串随机的临时密码,平时我们不可见,密码会被输出在日志中,如以下信息:

2020-04-05T01:08:33.853206Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: GCPsO1G[s4&6

2、初始化数据目录

执行mysqld –initialize –console命令时,MySQL 会检查指定数据目录是否存在,如果不存在,MySQL就会按照默认的存储引擎创建必要的文件和子目录。

当 MySQL 执行成功时,表示数据库初始化完成并且数据库可以正常工作了。

3、启动MySQL服务器实例

执行mysqld –initialize –console命令并不会启动 MySQL服务器实例。需要执行mysqld_safe启动 MySQL服务器实例。

四、mysqld –initialize –console命令注意事项

1、MySQL数据目录不为空

如果MySQL数据目录不为空时,执行mysqld –initialize –console命令将会输出以下信息,初始化中止:

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
2020-04-05T01:03:30.171566Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-04-05T01:03:30.172188Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19)  MySQL Community Server - GPL.

2、MySQL版本不同

MySQL的版本不同,执行mysqld –initialize –console命令时的日志信息可能会略有不同。

3、MySQL数据目录权限问题

如果MySQL数据目录的权限不正确,执行mysqld –initialize –console命令可能会失败。我们需要使用chmod 命令修改 MySQL 数据目录权限(默认权限为700),示例如下:

$ sudo chmod 700 /var/lib/mysql/

4、生成的密码强度

mysqld –initialize –console命令生成的密码强度并不高,我们需要在MySQL服务启动后,修改root账户的密码:

$ mysql -u root -p
Enter password: *********
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

总结

mysqld –initialize –console命令是MySQL服务初始化必不可少的命令之一,不仅会生成全新的MySQL数据目录,还会生成root账户的临时密码,需要注意的是,生成的密码强度并不高,需要及时修改密码。

原创文章,作者:LEFH,如若转载,请注明出处:https://www.506064.com/n/147237.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
LEFHLEFH
上一篇 2024-11-01 14:07
下一篇 2024-11-01 14:07

相关推荐

  • 如何修改mysql的端口号

    本文将介绍如何修改mysql的端口号,方便开发者根据实际需求配置对应端口号。 一、为什么需要修改mysql端口号 默认情况下,mysql使用的端口号是3306。在某些情况下,我们需…

    编程 2025-04-29
  • Python 常用数据库有哪些?

    在Python编程中,数据库是不可或缺的一部分。随着互联网应用的不断扩大,处理海量数据已成为一种趋势。Python有许多成熟的数据库管理系统,接下来我们将从多个方面介绍Python…

    编程 2025-04-29
  • openeuler安装数据库方案

    本文将介绍在openeuler操作系统中安装数据库的方案,并提供代码示例。 一、安装MariaDB 下面介绍如何在openeuler中安装MariaDB。 1、更新软件源 sudo…

    编程 2025-04-29
  • Python操作MySQL

    本文将从以下几个方面对Python操作MySQL进行详细阐述: 一、连接MySQL数据库 在使用Python操作MySQL之前,我们需要先连接MySQL数据库。在Python中,我…

    编程 2025-04-29
  • 数据库第三范式会有删除插入异常

    如果没有正确设计数据库,第三范式可能导致删除和插入异常。以下是详细解释: 一、什么是第三范式和范式理论? 范式理论是关系数据库中的一个规范化过程。第三范式是范式理论中的一种常见形式…

    编程 2025-04-29
  • MySQL递归函数的用法

    本文将从多个方面对MySQL递归函数的用法做详细的阐述,包括函数的定义、使用方法、示例及注意事项。 一、递归函数的定义 递归函数是指在函数内部调用自身的函数。MySQL提供了CRE…

    编程 2025-04-29
  • leveldb和unqlite:两个高性能的数据库存储引擎

    本文将介绍两款高性能的数据库存储引擎:leveldb和unqlite,并从多个方面对它们进行详细的阐述。 一、leveldb:轻量级的键值存储引擎 1、leveldb概述: lev…

    编程 2025-04-28
  • MySQL bigint与long的区别

    本文将从数据类型定义、存储空间、数据范围、计算效率、应用场景五个方面详细阐述MySQL bigint与long的区别。 一、数据类型定义 bigint在MySQL中是一种有符号的整…

    编程 2025-04-28
  • Python怎么导入数据库

    Python是一种高级编程语言。它具有简单、易读的语法和广泛的库,让它成为一个灵活和强大的工具。Python的数据库连接类型可以多种多样,其中包括MySQL、Oracle、Post…

    编程 2025-04-28
  • Go中struct的初始化

    本文将从多个方面详细阐述Go中struct的初始化方式,包括使用字面量初始化、使用new函数初始化以及使用构造函数等。通过本文的介绍,读者能够更深入的了解Go中struct的初始化…

    编程 2025-04-28

发表回复

登录后才能评论