本笔记可当工具书使用,不断更新各类使用中的错误及解决方案。
C:\Windows\system32>mysqld--verbose--help'mysqld'不是内部或外部命令,也不是可运行的程序或批处理文件。D:\Tools\mysql-8.0.23到此,MySQL的系统配置就搞定了,是不是很简单?但别高兴得太早,还有数据库本身的很多信息要设置。
C:\Windows\system32>mysqld--initialize-insecure--user=mysqlC:\Windows\system32>D:\Tools\mysql-8.0.23\bin>mysqld-installServicesuccessfullyinstalled.D:\Tools\mysql-8.0.23\bin>netstartMySQLMySQL服务正在启动.MySQL服务已经启动成功。D:\Tools\mysql-8.0.23\bin>mysqladmin-uroot-ppassword123456Enterpassword:mysqladmin:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.Warning:Sincepasswordwillbesenttoserverinplaintext,usesslconnectiontoensurepasswordsafety.由于第1步初始化时使用了–initialize-insecure参数,所以在“Enterpassword:”时直接回车不用输入密码。不加-insecure使用mysqld--initialize命令初始化数据库时会随机生成密码,这样在修改密码时Enterpassword要输入随机生成的密码,如果提示需要密码,可以打开data目录下的.err文件,搜索"Atemporarypasswordisgeneratedforroot@localhost",最后面就是密码
安装完需要重启计算机
在运行mysqld的时候,可能会出现以下错误提示,遇到这个问题,是因为执行命令的窗口权限不够,需要用管理员权限打开命令行窗口,即可解决问题
C:\Windows\system32>mysqld--initialize-insecure--user=mysqlInstall/RemoveoftheServiceDenied!4.1.3netstartMySQL发生系统错误2。在运行netstartMySQL的时候,系统可能会出现以下提示:
C:\Users\Administrator>netstartMySQL发生系统错误2。系统找不到指定的文件。这个原因是前面运行mysqld-install命令时,没有在MySQL的解压路径下执行。
C:\Users\Administrator>mysqld-installServicesuccessfullyinstalled.C:\Users\Administrator>netstartMySQL发生系统错误2。系统找不到指定的文件。这个时候要运行反安装指令mysqld-remove,将刚才安装的mysql反安装,再到正确的路径下安装
C:\Users\Administrator>mysqld-removeServicesuccessfullyremoved.然后切换到本机MySQL解压的Bin目录下重新运行安装命令
C:\Users\Administrator>cdD:\Tools\mysql-8.0.23\binC:\Users\Administrator>d:D:\Tools\mysql-8.0.23\bin>mysqld-installServicesuccessfullyinstalled.D:\Tools\mysql-8.0.23\bin>netstartMySQLMySQL服务正在启动..MySQL服务已经启动成功。4.2MySQL连接错误集合4.2.1ERROR2003(HY000):Can’tconnecttoMySQLserveron'localhost’(10061)在本地命令行窗口,输入mysql时,出现该错误,是因为mysql没有启动,只需要用netstartmysql启动即可
虽然caching_sha2_password的加密规则更加安全,但笔者使用MySQL作为学习,还是还原回旧的方式比较方便。所以笔者使用方法2来解决这个问题。
C:\Users\Administrator>mysql-uroot-pEnterpassword:******WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis11Serverversion:8.0.20MySQLCommunityServer-GPLmysql>mysql>ALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'123456';QueryOK,0rowsaffected(0.01sec)4.2.2.1第2步的命令遇到以下错误:mysql>ALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'123456';ERROR1396(HY000):OperationALTERUSERfailedfor'root'@'%'这是因为用户域并不是'%’。输入以下命令进行验证
mysql>usemysql;Databasechangedmysql>selectuser,host,pluginfromuser;+------------------+-----------+-----------------------+|user|host|plugin|+------------------+-----------+-----------------------+|mysql.infoschema|localhost|caching_sha2_password||mysql.session|localhost|caching_sha2_password||mysql.sys|localhost|caching_sha2_password||root|localhost|caching_sha2_password|+------------------+-----------+-----------------------+4rowsinset(0.01sec)可以看到root的域是localhost,所以,语句只要改成如下就可以了:
出现这个错误,是因为刚初始化之后的MySQL控制表,只允许本地访问,那么我们需要做的,就是开放访问控制。开放的控制可以根据通配符控制允许哪些IP访问。操作步骤(如果对命令不熟悉,可以往后看5.MySQL常用命令):
C:\Users\Administrator>mysql-uroot-pEnterpassword:******WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis11Serverversion:8.0.20MySQLCommunityServer-GPLmysql>mysql>usemysql;Databasechangedmysql>mysql>selectuser,host,pluginfromuser;+------------------+-----------+-----------------------+|user|host|plugin|+------------------+-----------+-----------------------+|mysql.infoschema|localhost|caching_sha2_password||mysql.session|localhost|caching_sha2_password||mysql.sys|localhost|caching_sha2_password||root|localhost|mysql_native_password|+------------------+-----------+-----------------------+4rowsinset(0.00sec)可以看到,"root"这个用户,只有"localhost"才能访问,这就是为什么其他的机器访问不到的原因。host有几个选项可以选择:
题外话,更安全的做法是新创建一个用户给远程使用,而root仅保留给本机访问。
mysql>updateusersethost='192.168.124.%'whereuser='root';QueryOK,1rowaffected(0.01sec)Rowsmatched:1Changed:1Warnings:0mysql>flushprivileges;QueryOK,0rowsaffected(0.00sec)4.2.5MySQL服务无法启动家里的电脑很久没用MySQL了,有项目需要研究,build的时候发现MySQL连不上,手动到cmd里启动,出现以下错误,提示:输入NETHELPMSG3534以获得更多的帮助。但是,童话里果然都是骗人的,输入了也没报告任何错误。
C:\Users\Administrator>mysqld--initializeC:\Users\Administrator>C:\Users\Administrator>netstartmysqlMySQL服务正在启动.MySQL服务已经启动成功。错误原因应该是data中的log数据出错,导致MySQL启动时访问log数据出错。
当从应用或其他地方连接发生这个错误的时候,即使在本机也无法通过root访问。
C:\Users\Administrator>mysql-uroot-pEnterpassword:******ERROR1040(HY000):Toomanyconnections在解决这个问题之前,需要看是否有应用程序正在不断访问数据库,如果能找到,就把连接的应用停止,再用root访问,如果仍然不行,使用netstop再netstart,然后用root进入mysql在mysqlconsole中,使用showprocesslist;可以查到连接数。
mysql>showprocesslist;+------+-----------------+-----------------+------+---------+------+------------------------+------------------+|Id|User|Host|db|Command|Time|State|Info|+------+-----------------+-----------------+------+---------+------+------------------------+------------------+|5|event_scheduler|localhost|NULL|Daemon|1815|Waitingonemptyqueue|NULL||1679|root|localhost:53215|NULL|Query|0|starting|showprocesslist|+------+-----------------+-----------------+------+---------+------+------------------------+------------------+2rowsinset(0.00sec)再运行以下命令查看最大连接数
mysql>showvariableslike'%max_connections%';+------------------------+-------+|Variable_name|Value|+------------------------+-------+|max_connections|151||mysqlx_max_connections|100|+------------------------+-------+2rowsinset,1warning(0.00sec)因为我的MySQL找不到my.cnf和my.ini,所以用了命令行临时改大连接数:setglobalmax_connections=2000以后看怎么进行永久性更改
MySQL5.x与MySQL8以上的重设密码有一些不同。主要不同之处有以下几点:
updatemysql.usersetpassword='newpassword'whereuser='root';updatemysql.usersetpassword=PASSWORD('newpassword')whereUser='root';开始操作了,需要打开两个cmd窗口。
窗口一运行以下2个语句,第2个语句输入之后,这个窗口是没有反映了的,相当于是锁死了这个窗口,接下来就要到第二个窗口操作。
C:\Users\Administrator>netstopmysqlMySQL服务正在停止.MySQL服务已成功停止。C:\Users\Administrator>mysqld--shared-memory--skip-grant-tables4.3.2窗口二输入mysql-uroot-p,并且在提示输入密码时直接回车,看到可以成功进入mysql控制窗口了
usemysql;updateusersetauthentication_string=''whereuser='root';flushprivileges;alteruser'root'@'localhost'identifiedby'12345678';lushprivileges;指令效果
mysql>usemysql;Databasechangedmysql>updateusersetauthentication_string=''whereuser='root';QueryOK,1rowaffected(0.02sec)Rowsmatched:1Changed:1Warnings:0mysql>flushprivileges;QueryOK,0rowsaffected(0.04sec)mysql>alteruser'root'@'localhost'identifiedby'12345678';QueryOK,0rowsaffected(0.01sec)mysql>flushprivileges;QueryOK,0rowsaffected(0.01sec)mysql>到这里打完收工,关闭2个窗口,netstartmysql开启mysql服务,可以使用新密码访问了
mysql-u{user}-p其中{user}为用户名,命令如下,执行该命令后,进入MySQL控制台界面
C:\Users\Administrator>mysql-uroot-pEnterpassword:******WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis11Serverversion:8.0.20MySQLCommunityServer-GPLmysql>5.2创建数据库createdatabase{dbname};该语句创建新的数据库
mysql>createdatabasemydb;QueryOK,1rowaffected(0.01sec)mysql>5.2显示所有数据库showdatabases;执行该命令,可以看到MySQL里所有的数据库,该语句必须在MySQL控制台,而不是在windows的命令行输入。使用5.1的命令可以进入MySQL的命令行。在刚初始化MySQL之后,输入该命令可以看到所有的数据库。执行效果如下
mysql>showdatabases;+--------------------+|Database|+--------------------+|information_schema||mysql||performance_schema||supermarket||sys||umanager|+--------------------+6rowsinset(0.00sec)5.3进入某个数据库use{数据库名};操作上,必须要进入某个数据库,才能操作数据库中的表,特别是刚初始化之后,可能其他的工具都连不上,需要通过MySQL命令行来执行一些命令才可以使用。执行效果如下
mysql>usemysql;Databasechangedmysql>5.4修改数据库密码alteruser'root’@'localhost’identifiedby'newpassword’;用这个命令,需要是已经通过mysql-uroot-p进入数据库。newpassword为希望设置的新密码