ubuntu22.04下mysql-server-8.0数据目录迁移方法
前言
我习惯于把mysql的数据目录放到其他硬盘,以便于使得系统出问题不得不重装后,数据仍然能无损,而在我本次恢复数据目录时,遇到了一些问题,再次记录,供以后参考
系统环境
- Ubuntu 22.04
- mysql-server-8.0
- 数据目录放在外挂的usb固态硬盘,usb固态硬盘挂载路径为
/data
,而mysql的数据目录为/data/mysql
恢复(目录迁移)过程
1. 安装mysql,安装后不用启动
sudo apt install mysql-server-8.0
如果已经安装,则将其停止
sudo service mysql stop
2. 修改mysql涉及数据目录相关配置,此处参考 Ubuntu 系统mysql数据库目录迁移
将mysql数据目录/data/mysql
的所有
上层目录/data
的权限改为777
,否则在启动mysql的时候会出现“Error: 13 权限不足”的错误
sudo chmod 777 /data
以管理员
权限编辑/etc/mysql/mysql.conf.d/mysqld.cnf
。把datadir = /var/lib/mysql
修改为
datadir = /data/mysql
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
以管理员
权限编辑/etc/apparmor.d/usr.sbin.mysqld
。把# Allow data files dir access
下面的/var/lib/mysql/ r,
修改为/data/mysql/ r,
;把/var/lib/mysql/** rwk,
修改为/data/mysql/** rwk,
sudo vim /etc/apparmor.d/usr.sbin.mysqld
以管理员
权限编辑/etc/apparmor.d/abstractions/mysql
。把/var/lib/mysql{,d}/mysql{,d}.sock rw,
修改为/data/mysql{,d}/mysql{,d}.sock rw,
sudo vim /etc/apparmor.d/abstractions/mysql
重启apparmor
和mysql
服务。
sudo service apparmor restart
sudo service mysql restart
3.踩坑说明
- 配置修改后,一定要记得先重启apparmor服务,否则mysql无法启动,会报错
2023-06-29T06:03:22.579599Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.33-0ubuntu0.22.04.3) (Ubuntu).
2023-06-29T06:03:23.077481Z 0 [Warning] [MY-010091] [Server] Can't create test file /data/mysql/mysqld_tmp_file_case_insensitive_test.lower-test
2023-06-29T06:03:23.077536Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.33-0ubuntu0.22.04.3) starting as process 10218
2023-06-29T06:03:23.080575Z 0 [Warning] [MY-010091] [Server] Can't create test file /data/mysql/mysqld_tmp_file_case_insensitive_test.lower-test
2023-06-29T06:03:23.080585Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /data/mysql/ is case insensitive
mysqld: File './binlog.index' not found (OS errno 13 - Permission denied)
- 新的mysql目录用户和用户组必须都是mysql