问题:本地MySQL和数据库管理的phpMyAdmin由于一年前的小白的自己不知道出于什么理由在D、E盘(现在使用中)分别装了集成环境AppServ导致启动了mysqld服务phpMyAdmin依然报类似mysqli_real_connect()等无法连接服务的错误,因为开发一直远程连接公司公用数据库服务器,没有理会。近期一个项目甲方提供的用户测试数据涉及到保密信息,领导要求只能在本地测试,所以下定决心解决一下这个坑。


MySQL(5.7)本地目录

D:\AppServ\MySQL

E:\AppServ\MySQL


解决过程(可能与我实际解决问题过程不一致,因为当时没有头绪看到一个错误就解决一个错误,现在重新整理思路):

一、MySQL服务启动失败

由于之前本地服务器在D盘,现在使用E必然导致服务中的可执行文件路径和MySQL安装目录不一致,导致mysql服务启动失败,此时需要修改可执行路径。

解决方法:

1,CMD------regedit,打开注册表编辑器;

2,根据路径找到mysql注册表,HKEY_LOCAL_MACHINE----SYSTEM----CurrentControlSet----Services----mysql,修改ImagePath值为正确的路径;

3,运行mysql安装目录下的bin\mysqld.exe,接着再去CMD中(右键以管理员身份运行)启动mysql服务即可;

cmd怎么看是否安装了MySQL_mysql

如果此时提示“服务无法启动 服务没有报告任何错误”,那一定是初始化的问题;

【在mysql5.7以上版本中默认没有一个data目录,即没有初始化服务。需要先初始化mysql才可以启动服务,否则会报 “服务没有报告任何错误”,启动失败】

4,CMD中(右键以管理员身份运行)在mysql的bin目录下执行mysqld  --initialize-insecure (不设置root密码,建议使用)命令,第一次执行这个命令会等待的时间稍微长了一些,并且控制台没有任何返回结果。可以看到mysql的根目录下会多出一个data文件夹,里面一堆文件;

cmd怎么看是否安装了MySQL_cmd怎么看是否安装了MySQL_02

cmd怎么看是否安装了MySQL_php_03

如果执行mysqld  --initialize-insecure初始化命令的时候报如下错误,

cmd怎么看是否安装了MySQL_cmd怎么看是否安装了MySQL_04

原因就是MySQL没有先执行mysqld  --initialize-insecure而是先执行net start mysql了,mysql会自动创建一个data文件夹,并在里面初始化一些文件,在再次执行mysqld - initialize的时候并没有把data文件夹删除,启动失败。

解决方法:查看mysql目录下的data文件夹,删除data中全部文件,若提示mysqld占用无法删除,打开任务管理器右键结束mysqld服务再次删除,然后如第4步开头所说执行mysqld - initializemysqld  --initialize-insecure命令,再执行net start mysql命令重启mysql即可启动服务。


二、MySQL5.7初始密码及修改问题

输入“mysql或者mysql -hlocalhost -uroot -p”回车,出错“ERROR 1045 Access denied for user 'xxx' NO”

cmd怎么看是否安装了MySQL_mysql_05

原因是新版的mysql5.7及以上版本为了安全性,默认是有密码的。解决方法:mysql默认安装会有密码生成,密码文件直接写在 mysql_error.txt日志文件(每个版本文件都不一样,在MySQL根目录下找找便能发现)中,MySQL5.7在安装完后,第一次启动时会生产一个随机的密码,找到登录即可。

如果不想找密码或者登录时报 Your password has expired. To log in you must change it using a client that supports expired passwor初始密码过期错误,那就一手把密码改了。

解决方法:

1.关闭正在运行的MySQL服务:net stop mysql;

cmd怎么看是否安装了MySQL_mysql5.7_06

2.输入:mysqld -nt --skip-grant-tables 
然后回车,如果没有错误信息,就行了;

注:skip-grant-tables参数用了之后,就可以跳过登录校验; 

cmd怎么看是否安装了MySQL_php_07

3.再打开一个命令行(因为刚才那个DOS窗口已经不能动了),同样转到mysql的bin目录下; 

4.直接输入 mysql 并回车,如果成功,将出现MySQL提示符 >

cmd怎么看是否安装了MySQL_mysql_08

5.切换到mysql表

cmd怎么看是否安装了MySQL_php_09

6.修改密码

cmd怎么看是否安装了MySQL_php_10

MySQL5.7更改密码时出现ERROR 1054 (42S22): Unknown column 'password' in 'field list',原因是mysql数据库下已经没有password这个字段了,password字段改成了authentication_string,运行上面命令回车即可。

7.刷新权限

cmd怎么看是否安装了MySQL_php_11


三、phpMyAdmin配置

将下载的phpmyadmin压缩包解压到本地项目文件夹下,

打开libraries下的config.default.php文件依次找到下面各项,按照说明配置即可,

$cfg['PmaAbsoluteUri'] = '';这里填写phpmyadmin的访问网址:如改成$cfg['PmaAbsoluteUri'] = 'localhost/phpMyAdmin'

$cfg['Servers'][$i]['host'] = 'localhost';填写localhost或mysql所在服务器的ip地址,如果mysql和该phpmyadmin在同一服务器,则按默认localhost cfg['Servers'][$i]['port'] = ''; (mysql端口,如果是默认3306,保留为空即可 )

$cfg['Servers'][$i]['user'] = 'root'; // MySQL user 访问phpmyadmin使用的mysql用户名 $cfg['Servers'][$i]['password'] = ''; // MySQL password (only needed对应上述mysql用户名的密码

$cfg['Servers'][$i]['auth_type'] = 'cookie';

$cfg['blowfish_secret'] = ''; 如果认证方法设置为cookie,就需要设置短语密码,置于设置为什么密码,由您自己决定 ,但是不能留空,否则会在登录phpmyadmin时提示错误

phpmyadmin在使用过程中经常出现“登陆超时(1440秒未活动),请重新登录”,很烦

解决方法: phpMyAdmin / libraries / config.default.php 文件,修改$cfg['LoginCookieValidity'] = 1440;

将1440修改成更大的值即可。(3600为1个小时)

浏览器 localhost/phpmyadmin root root 成功。



不再关心宇宙从哪来到哪去

只想低下头好好珍惜身边人的普普通程序员


2018.4.25