mysql起动报错The server quit without updating PID file (/usr/local/mysql/data/xxx.pid)
方法思路:新建数据目录,修改配置文件中数据目录,把库文件夹和数据文件复制到新目录中。
一、新建数据目录:
cd /usr/local/mysql
mkdir data2
修改mysql目录权限:
cd ..
chmod 777 -R mysql
chown -R mysql:mysql mysql
二、重新配置vi /etc/my.cnf :
#在[mysqld]中添加:
#skip-grant-tables #初始化之后不识别root密码,需要重新设置root密码时使用
basedir=/usr/local/mysql
#datadir=/usr/local/mysql/data #旧的数据目录
datadir=/usr/local/mysql/data2 #新的数据目录
log-error=/usr/local/mysql/data/error.log
pid-file = /usr/local/mysql/data/mysql.pid
user = mysql
tmpdir = /tmp
#保存退出
三、 初始化数据库
cd /usr/local/mysql/bin
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data2
[root@localhost scripts]# service mysqld restart(如果此时mysql进程没起着,使用service mysqld start否则service mysqld restart先停时会报错找不到mysql.sock)
Shutting down MySQL. [确定]
Starting MySQL. SUCCESS!
四、重新设置root密码:
vi /etc/my.cnf :
去掉注释后重启mysql
skip-grant-tables #初始化之后不识别root密码,需要重新设置root密码时使用
不用密码登录mysql
mysql -uroot -p两次enter健:
update mysql.user set authentication_string=password('abc123') where host='localhost' and user='root';
update mysql.user set authentication_string=password('abc123') where host='%' and user='root';
exit后再把skip-grant-tables注释掉,然后用设置的密码登录:mysql -uroot -p
报错:mysql5.7密码过期ERROR 1862 (HY000): Your password has expired. To log in you must change
翻译:
错误1862(HY000):你的密码已经过期。登录必须改变它使用一个客户端,支持过期的密码。
解决方法:
1、 用忽略授权表的方法进入mysql
vi /etc/my.cnf
[mysqld]
skip-grant-tables
:wq! #保存退出
2、进入mysql,查看root用户的详细信息
# mysql -u root -p
> use mysql
> select* from mysql.user where user='root'\G
在解决之前红色处是YES密码有过期限制。
把password_expired 改成不过期
> updateusersetpassword_expired='N'whereuser='root';
> flush privileges;
> quit
4、把 /etc/my.cnf 的 skip-grant-tables 这行注释掉
5、重启服务
1 #service mysql restart
6、再次登陆 mysql 就正常了
五、但是,这时用客户端连接数据库时报错:
在开发中为了让开发更方便,在本地配置环境,希望可以直接访问服务器上的MySQL数据库,更方便的管理数据库,
需要在本地远程连接linux服务器的本地数据库,直接用数据库管理工具连接出现如下报错1130 - Host 127.0.0.1 is not allowed to connect to this MySQL server:
这个错误说明MySQL没有允许远程登录,只要授权可以远程登录就ok了。
登录执行:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'abc123' WITH GRANT OPTION;
FLUSHPRIVILEGES这里不输入刷新权限命令的话也可以重启mysqld,命令:
service mysqld restart
六、连上客户端后发现之前的库和表都不在了,只有mysql自带的information_schema、mysql、performance_schema、sys四个库,需要恢复库和表
对比旧数据库目录和新数据库目录:发现旧数据库目录有库文件夹,复制到新的数据目录里,这些库文件夹里是表结构文件和数据文件,注意mysql自带的四个库不用复制
[root@10-4-24-123 data]# cp -ar /usr/local/mysql/data/bjlgb /usr/local/mysql/data2
[root@10-4-24-123 data]# cp -ar /usr/local/mysql/data/ddtest /usr/local/mysql/data2
[root@10-4-24-123 data]# cp -ar /usr/local/mysql/data/Ddtest /usr/local/mysql/data2
[root@10-4-24-123 data]# cp -ar /usr/local/mysql/data/fj_dingtalk /usr/local/mysql/data2
[root@10-4-24-123 data]# cp -ar /usr/local/mysql/data/ghlgb /usr/local/mysql/data2
[root@10-4-24-123 data]# cp -ar /usr/local/mysql/data/hn_dingtalk /usr/local/mysql/data2
[root@10-4-24-123 data]# cp -ar /usr/local/mysql/data/lgbcreate /usr/local/mysql/data2
[root@10-4-24-123 data]# cp -ar /usr/local/mysql/data/lgbsmp_fj /usr/local/mysql/data2
[root@10-4-24-123 data]# cp -ar /usr/local/mysql/data/lgbsmp_fj1 /usr/local/mysql/data2
[root@10-4-24-123 data]# cp -ar /usr/local/mysql/data/lgbsmptest2 /usr/local/mysql/data2
[root@10-4-24-123 data]# cp -ar /usr/local/mysql/data/lgbsmp_yn /usr/local/mysql/data2
然后重启mysql,登录mysql -uroot -p:
[root@10-4-24-123 data]# service mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
七、发现show databases;没问题,select时提示Table 'bjlgb.user' doesn't exist,并且客户端里也看不见表只能看见库
mysql拷贝数据库库文件,复制还原后显示表不存在怎么办
(有时候data目录却发现data目录多了几个文件
错误提示文件 .err,前面是主机名,不同的主机文件名不一样,但后缀是一样的,,查看主机名,ipconfig/all,我们用记事本打开,以err结尾的错误日志文件,提示的错误,其实也给出你解决的办法,提示说 innodb引擎不见了
查看当前数据库的引擎
发现默认的数据库引擎是innodb,当你建立表时若不指明数据库的引擎,那么他的默认引擎就是InnoDB,而错误里面提示了innodb不见了是什么了,百度了一下说,InnoDB与ibdata1文件有关,再百度了一下ibdata1是什么 http://blog.csdn.net/anljf/article/details/6653282
我的data里没有产生这些文件,但是同样用下面方法解决了(有这三个文件时删除这三个文件才好,当然是因为这三个文件了,这三个文件是在启动mysql服务和登录mysql的时候生成的,记录了一些重要的配置和信息,所以啊得把三个文件删掉,删掉之前应该把MySQL服务关闭掉):
复制的数据库文件文件,里面只是数据库和表的结构,所示show的时候还是能看见的,但是select的时候就出问题了,因为数据存储在另外一个文件里面,就是ibdata1,所以当你备份数据库的时候不能只拷贝数据库文件,还得把ibdata1这个文件拷贝上,而当你恢复数据库的时候,也得把这两个文件都复制在data目录里面,当提示的时候选择替换掉原来的ibdata1文件
[root@10-4-24-123 data]# cp -f /usr/local/mysql/data/ibdata1 /usr/local/mysql/data2
然后重启mysql登录,select好了:
[root@10-4-24-123 mysql]# service mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[root@10-4-24-123 mysql]# mysql -uroot -p