Mysql数据备份与迁移(源服务器无法登录的情况)

dilipy 2019-06-29

本次针对ubuntu物理服务器系统出现问题无法登录的情况,如何快速备份或者迁移mysql的数据文件

本文目录

  • mysql在服务器上的位置
  • 快速备份数据库文件
  • 迁移mysql数据库文件目录

mysql在服务器上的位置

首先我们看一下linux系统的大致目录:

  1. /var这个目录中存放着那些不断在扩充着的东西,为了保持/usr的相对稳定,那些经常被修改的目录可以放在这个目录下,系统的日志文件就在/var/log目录中。
  2. /usr 这是最庞大的目录,我们要用到的应用程序和文件几乎都存放在这个目录下。其中包含以下子目录;

    • /usr/bin 存放着许多应用程序;
    • /usr/lib 存放一些常用的动态链接共享库和静态档案库;
    • /usr/local 这是提供给一般用户的/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

快速备份数据库文件

1.复制无法登录的服务器上的mysql数据库文件

通过上面的分析,我们应该大致知道了mysql数据文件所在的目录,由于服务器无法登录,我们可以找一个虚拟U盘进入U盘安装ubuntu的界面,点击try ubuntu,进入虚拟的ubuntu系统,将/var/lib/mysql/下的数据库文件复制出来

2.将数据库文件复制到另外一台可用的数据库上

接下来我们找一台可以正常使用的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数据库文件目录

通过以上操作基本可以对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服务即可

相关推荐