dilipy 2019-06-29
本次针对ubuntu物理服务器系统出现问题无法登录的情况,如何快速备份或者迁移mysql的数据文件
首先我们看一下linux系统的大致目录:
/usr 这是最庞大的目录,我们要用到的应用程序和文件几乎都存放在这个目录下。其中包含以下子目录;
根据上面的分析,我们可以大致了解到mysql在linux下目录下的大致结构:
/usr/bin 客户端程序和脚本
/usr/sbin mysqld 服务器
/var/lib/mysql 日志文件,数据库 [下文备份要用到这个目录]
/usr/include/mysql 包含( 头) 文件
/usr/lib/mysql 库
/usr/share/mysql 错误消息和字符集文件
如果找不到的话,可以通过linux find查找命令去查找mysql的目录,大致也能分析到mysql所在的目录,如下:
sudo find / -name mysql
通过上面的分析,我们应该大致知道了mysql数据文件所在的目录,由于服务器无法登录,我们可以找一个虚拟U盘进入U盘安装ubuntu的界面,点击try ubuntu,进入虚拟的ubuntu系统,将/var/lib/mysql/下的数据库文件复制出来
接下来我们找一台可以正常使用的linux系统的服务器,登录上去,停掉服务器上的mysql服务(如果没有mysql的话,需要安装)
service mysql stop # 停止新服务器的mysql服务
将刚刚复制下来的数据库文件,放到现在所在的数据库目录/var/lib/mysql下,然后再启动数据库,命令如下:
service mysql start # 启动mysql数据库
如果在启动的时候出现如下问题:
Redirecting to /bin/systemctl start mysqld.service Job for mysqld.service failed. See 'systemctl status mysqld.service' and 'journalctl -xn' for details.
有可能是mysql所在目录权限的问题,执行
chown mysql:mysql -R /var/lib/mysql
然后再执行,基本就成功了
service mysql start # 启动mysql数据库
注意:
如果服务器只是安装了mysql,没有将mysql注册为服务的话,则启动的命令要有所变化,命令如下:
/etc/init.d/mysql start # 启动mysql服务 /etc/init.d/mysql stop #停止mysql服务 /etc/init.d/mysql restart # 重启mysql服务
通过以上操作基本可以对mysql 数据库做备份或者恢复,我们也知道了/var/lib/mysql是mysql的数据库文件目录,当然我们也可以修改mysql的数据库文件的目录,比如我们想把数据库文件目录保存在/media/hdb1/db目录下,具体操作步骤如下:
1.修改该目录的权限:
chown mysql:mysql /media/hdb1/db
修改文件/etc/apparmor.d/usr.sbin.mysqld
sudo vim /etc/apparmor.d/usr.sbin.mysqld
找到下面的配置
/var/lib/mysql r, /var/lib/mysql/** rwk,
将其修改为
/media/hdb1/db r, /media/hdb1/db/** rwk,
修改目录
sudo vim /etc/mysql/my.cnf
把datadir = /var/mysql换成datadir = /media/hdb1/db
重启mysql服务即可