报错处理
msql服务器—data⽬录简介
mysql服务器的data⽬录是我们保存数据库对象数据的⽬录。
data⽬录在什么时候初始化?
MySQL安装完成后,数据⽬录必须初始化,包括MySQL系统架构(system schema)中的表。
对于⼀些MySQL安装⽅法,数据⽬录初始化是⾃动的
对于其他安装⽅式,需要⼿动初始化数据⽬录。这包括在Unix和Unix-like系统上从通⽤的⼆进制和源发⾏版安装,以及在Windows上从ZIP压缩包安装。
注意:对于⼿动初始化数据⽬录的安装⽅式,最好不要通过新建⽂件夹的⽅式,⽽是通过mysqld命令⼿动初始化。因为初始化正常data⽬录包含很多MySql系统的表⽐如mysql表。⽽通过新建⽂件夹⽅式创建的data⽬录是空的,就算后续通过mysqld命令重新初始化,data⽬录也可能还是空的。下图为正确初始化的data⽬录:
针对⾮⾃动初始化数据⽬录的MySQL安装⽅式,介绍如何⼿动初始化数据⽬录。
数据⽬录初始化概述
许晴回应恋情
如果没有任何选项⽂件,服务器将使⽤默认设置启动。为了明确指定MySQL服务器在启动时应该使⽤的选项,将它们放在⼀个选项⽂件中,如/etc/myf或/etc/mysql/myf。例如,您可以使⽤⼀个选项⽂件来设置secure_file_priv系统变量。
数据⽬录初始化过程
1、命令⾏或dos窗⼝从location更改到MySQL安装的顶级⽬录,通常是/usr/local/mysql(根据需要调整系统的路径名):
cd /usr/local/mysql
2、要初始化数据⽬录(data directory),请使⽤--initialize或--initialize-insecure选项调⽤mysqld,这取决于是希望服务器
为'root'@'localhost'帐户⽣成随机初始密码,还是创建没有密码的帐户:
使⽤--initialize进⾏“默认安全”安装(即,包括⽣成随机初始root密码)。在这种情况下,密码被标记为过期,您必须更改⼀个新的密码。
使⽤--initialize-insecure,不会⽣成root密码。这是不安全的;假定您打算在将服务器投⼊⽣产使⽤之前及时为该帐户分配密码。
注意:
--initialize和--initialize-insecure选项官⽹描述:该选项⽤于通过创建数据⽬录和填充MySQL系统模式中的表来初始化MySQL安装。
服务器将任何消息(包括任何初始密码)写⼊其标准错误输出。这可能会被重定向到错误⽇志,所以如果在屏幕上没有看到消息,请查看韩庚照片
那⾥。
在Unix和Unix-like系统上,数据库⽬录和⽂件由mysql登录帐户拥有是很重要的,这样当稍后运⾏服务器时,服务器就可以对它们进⾏读写访问。为了确保这⼀点,从系统root帐户启动mysqld,并包括--user选项,如下所⽰:
bin/mysqld --initialize --user=mysql
bin/mysqld --initialize-insecure --user=mysql
或者,使⽤mysql登录时执⾏mysqld,在这种情况下,可以省略命令中的——user选项。
在Windows上,使⽤以下命令之⼀:
bin\mysqld --initialize --console
bin\mysqld --initialize-insecure --console
如果mysqld⽆法识别安装⽬录或数据⽬录的正确位置,可能需要指定其他选项,⽐如--basedir或--datadir。例如(单⾏输⼊命令):
bin/mysqld --initialize --user=mysql --basedir=/opt/mysql/mysql --datadir=/opt/mysql/mysql/data
或者,将相关的选项设置放在⼀个选项⽂件中,并将该⽂件的名称传递给mysqld。对于Unix和Unix-like系统,假设选项⽂件名
为/opt/mysql/mysql/etc/myf。把这些⾏放到⽂件中:
[mysqld]
basedir=/opt/mysql/mysql
datadir=/opt/mysql/mysql/data
然后调⽤mysqld,如下所⽰(先使⽤--defaults-file选项在单⾏输⼊命令):
bin/mysqld --defaults-file=/opt/mysql/mysql/etc/myf --initialize --user=mysql
在Windows上,假设C:\my.ini包含以下⾏:
[mysqld]
basedir=C:\\Program Files\\MySQL\\MySQL Server 8.0
datadir=D:\\MySQLdata
然后调⽤mysqld,如下所⽰(先使⽤——defaults-file选项在单⾏输⼊命令):
bin\mysqld --defaults-file=C:\my.ini --initialize --console
数据⽬录初始化过程中的服务器操作海涛求婚
1、当使⽤--initialize或--initialize-insecure选项调⽤mysqld时,在数据⽬录初始化顺序中执⾏以下操作:
如果不存在数据⽬录,则由服务器创建。
如果数据⽬录存在,但不是空的(即,它包含⽂件或⼦⽬录),服务器在⽣成⼀个错误消息后退出:
[ERROR] --initialize specified but the data directory exists. Aborting.
配置windows update失败在这种情况下,请删除或重命名数据⽬录,然后重试。如果每个条⽬的名称都以句点(.)开头,则允许现有数据⽬录⾮空。
2、在数据⽬录中,服务器创建mysql system schema及其表,包括数据字典表、授权表、时区表和服务器端帮助表。
3、服务器初始化系统表空间和管理InnoDB表所需的相关数据结构。
注意:在mysqld设置InnoDB system表空间后,某些对表空间特征的更改需要设置⼀个全新的实例。合格的更改包括系统表空间中第⼀个⽂件的⽂件名和撤消⽇志的数量。如果不希望使⽤默认值,请在运⾏mysqld之前确保MySQL配置⽂件中已经设置了innodb_data_file_path和innodb_log_file_size配置参数。还要确保在必要时指定其他影响InnoDB⽂件创建和位置的参数,例如innodb_data_home_dir和
innodb_log_group_home_dir。
如果这些选项在您的配置⽂件中,但是该⽂件不在MySQL默认读取的位置,那么在运⾏mysqld时使⽤--default -extra-file选项指定⽂件位置。
4、服务器会创建⼀个“root”@“localhost”超级⽤户帐户和其他保留帐户。有些保留帐户是锁定的,不能被客户端使⽤,但
是'root'@'localhost'是⽤于管理使⽤的,应该给它分配⼀个密码。
关于'root'@'localhost'帐户密码的服务器操作取决于你如何调⽤它:
使⽤--initialize不使⽤--initialize-insecure,服务器⽣成⼀个随机密码,将其标记为过期,并写⼊⼀条显⽰密码的消息:
[Warning] A temporary password is generated for root@localhost:
iTag*AfrH5ej
使⽤--initialize-insecure,(⽆论使⽤还是不使⽤--initialize,因为--initialize-insecure意味着--initialize),服务器不会⽣成密码或将其标记为过期,并写⼊警告消息:
[Warning] root@localhost is created with an empty password ! Please
沙溢回应培训代言consider switching off the --initialize-insecure option.
非常完美齐琦微博5、服务器填充⽤于帮助语句的服务器端帮助表。服务器不填充时区表。
6、如果给定init_file系统变量来命名⼀个SQL语句⽂件,服务器将执⾏该⽂件中的语句。该选项允许您执⾏⾃定义引导序列。
7、系统退出。
初始化后的root密码分配
在使⽤--initialize或--initialize-insecure启动服务器来初始化数据⽬录后,正常启动服务器(也就是说,不使⽤上述任何⼀种选项),并
为“root”@“localhost”帐户分配⼀个新密码:
1、启动服务器。
2、连接到服务器:
如果你使⽤--initialize但不使⽤--initialize-insecure来初始化数据⽬录,以root⾝份连接到服务器:
mysql -u root -p
然后,在密码提⽰符下,输⼊服务器在初始化顺序中⽣成的随机密码(如果您不知道这个密码,请查看服务器错误⽇志。):
Enter password: (enter the random root password here)
如果你使⽤--initialize-insecure来初始化数据⽬录,不⽤密码以root⾝份连接到服务器:
mysql -u root --skip-password
3、连接完成后,使⽤ALTER USER语句分配⼀个新的root密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';
或者
update mysql.user set authentication_string=password('root') where user='root' and Host = 'localhost';
注意:
尝试连接到主机127.0.0.1通常会解析到本地主机帐户。但是,如果服务器在运⾏时启⽤了skip_name_
resolve,则会失败。如果您计划这样做,请确保存在⼀个可以接受连接的帐户。例如,要使⽤--host=127.0.0.1或--host=::1以root⽤户连接,请创建以下帐户:
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';
可以使⽤init_file系统变量将这些语句放在⼀个⽂件中,如数据⽬录初始化期间的服务器操作中如果给定init_file系统变量来命名⼀个SQL语句⽂件,服务器将执⾏该⽂件中的语句。该选项允许您执⾏⾃定义引导序列。。
发布评论