您的当前位置:首页正文

mysql数据文件迁移(转)(亲测可用)

2024-11-07 来源:个人技术集锦

转载之:

先登录自己的mysql数据库,比如我用root账户登录,然后使用下面查询语句查询:

show variables like '%dir%';

得到数据库文件配置信息:

 

另外一个basedir参数表示mysql数据库的安装位置,迁移数据库文件位置不需要改动这个参数。

先使用下面命令将mysql数据库服务停止:

sudo /etc/init.d/mysql stop

sudo mv /var/lib/mysql /mnt/wintime/mysql/

sudo cp -a /var/lib/mysql /mnt/wintime/mysql/

3、修改配置文件

一共有三个配置文件需要修改:

3.1 my.cnf文件

mysql数据库会按顺序优先级从/etc/my.cnf、/etc/mysql/my.cnf、/usr/etc/my.cnf、~/.my.cnf四个位置找my.cnf配置文件,一旦找到就不再继续往下找。Ubuntu默认将my.cnf配置文件放在/etc/mysql/my.cnf位置,所以在/etc/my.cnf位置没有找到这个配置文件。

 

 

 

 

 

 

修改后保存并退出。

3.2 usr.bin.mysqld文件

sudo vim /etc/apparmor.d/usr.sbin.mysqld

找到其中的

/var/lib/mysql/ r,

  /var/lib/mysql/** rwk,

两行权限声明,可以在前面加上#好注释掉。然后对照格式,加入新路径的权限声明:

如下所示

 

 

  /mnt/wintime/mysql/mysql/ r,

  /mnt/wintime/mysql/mysql/** rwk,

# /var/lib/mysql/ r,

# /var/lib/mysql/** rwk,

保存并关闭。

3.3 abstractions/mysql文件

由于usr.bin.mysqld文件中引用了abstractions/mysql文件,也就是会将abstractions/mysql文件中的权限声明导入进来。因此,也修改下这个文件:

sudo vim /etc/apparmor.d/abstractions/mysql

同样也是将新数据库文件路径中的socket文件权限添加进去,同时可以删除或者注释掉全路径中申请的权限,效果下所示:

 

  /mnt/wintime/mysql/mysql/mysql.sock  rw,

 #  /var/lib/mysql/mysql.sock rw,

   /{var/,}run/mysql/mysql.sock rw,

   /usr/share/{mysql,mysql-community-server,mariadb}/charsets/ r,

   /usr/share/{mysql,mysql-community-server,mariadb}/charsets/*.xml r,

保存后退出。

4、重启数据库

配置文件修改成功后就可以重启数据库,重启数据库之前需要先重新载入apparmor配置文件,使用下面命令重新载入:

sudo /etc/init.d/apparmor restart

重载成功就可以使用下面命令启动数据库:

sudo /etc/init.d/mysql start

5、权限问题

经过上诉步骤之后,你有可能数据库无法启动。忽略继续登录数据库出现下面关于sock的错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

查看数据库的启动错误日志,sudo vim /var/log/mysql/error.log,还能看到Table 'plugin' is read only这样的错误:

 

 

 

 

 

例如,使用下面命令修改本文中/mnt/wintime/mysql的权限:

sudo chmod 755 /mnt/wintime/mysql

权限修改后再次启动数据库sudo /etc/init.d/mysql start,应该就能成功启动了。

进入数据库,查看当前路径配置信息:

 

 

 

数据库已经正常启动, 并且数据库文件路径也已经替换到/mnt/wintime/mysql目标路径,数据库文件迁移成功。

 

 

补充:以上这篇文章,照着做,基本大差不差。

如果不行,还要执行下面的这条语句,用来初始化某些设置。

 

 

  

  我修改的时候,是把datadir迁移到了 /mnt/attachments/new_mysql_datadir/mysql这个文件夹下面。

然后socket就是 /mnt/attachments/new_mysql_datadir/mysql/mysql.sock。

然后我使用的时候,发现root下可以直接登记去,lenovo下要使用-h参数。  (登录mysql的账号都是root账号),最后发现是 /mnt/attachments/new_mysql_datadir/mysql这个文件的权限问题,chmod 777 /mnt/attachments/new_mysql_datadir/mysql 就好了。

扯了一上午,啥事都干不了。气死了。

 

 

 

 

 补充:

关于权限问题

 

 

root@lenovo-70FR0028CN:/mnt/wintime/mysql# ls -al

总用量 12

drwxr-xr-x  3 mysql mysql 4096 12月 16 14:02 .

drwxrwxrwx  9 root  root  4096 12月 13 10:29 ..

drwxr-xr-x 11 mysql mysql 4096 12月 16 14:52 mysql

root@lenovo-70FR0028CN:/mnt/wintime/mysql# 

 

显示全文