恢复数据库表结构和数据(mysql报错pid初始化数据库后)

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密码有过期限制。

恢复数据库表结构和数据(mysql报错pid初始化数据库后)_第1张图片

把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报错pid初始化数据库后)_第2张图片

在开发中为了让开发更方便,在本地配置环境,希望可以直接访问服务器上的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自带的四个库不用复制

恢复数据库表结构和数据(mysql报错pid初始化数据库后)_第3张图片

[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引擎不见了

查看当前数据库的引擎

恢复数据库表结构和数据(mysql报错pid初始化数据库后)_第4张图片

发现默认的数据库引擎是innodb,当你建立表时若不指明数据库的引擎,那么他的默认引擎就是InnoDB,而错误里面提示了innodb不见了是什么了,百度了一下说,InnoDB与ibdata1文件有关,再百度了一下ibdata1是什么  http://blog.csdn.net/anljf/article/details/6653282

恢复数据库表结构和数据(mysql报错pid初始化数据库后)_第5张图片

我的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

你可能感兴趣的:(恢复数据库表结构和数据(mysql报错pid初始化数据库后))