前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MariaDB修改与迁移文件夹

MariaDB修改与迁移文件夹

作者头像
taixingyiji
发布2022-10-27 16:28:37
8320
发布2022-10-27 16:28:37
举报

# 前言

操作系统:centOS7

MariaDB: 10.7.3

注意

迁移前,请一定做好备份!!!

# 1.准备

一般情况下,mariadb的data文件夹会在以下路径:

代码语言:javascript
复制
[root@mariadb-t1 ~]# ll /var/lib/mysql
total 176176
-rw-rw---- 1 mysql mysql    16384 Jun  4 00:13 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Jun  4 00:13 aria_log_control
drwx------ 2 mysql mysql     4096 Jun  4 00:10 ccnet_db
drwx------ 2 mysql mysql     4096 Jun  4 00:11 ejbca
-rw-rw---- 1 mysql mysql 79691776 Jun  4 00:13 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Jun  4 00:13 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Jun  4 00:01 ib_logfile1
-rw-rw---- 1 mysql mysql        0 Jun  4 00:03 multi-master.info
drwx--x--x 2 mysql mysql     4096 Jun  4 00:01 mysql
drwx------ 2 mysql mysql       19 Jun  4 00:01 performance_schema
drwx------ 2 mysql mysql     4096 Jun  4 00:11 seafile_db
drwx------ 2 mysql mysql       19 Jun  4 00:10 seafile_t1
drwx------ 2 mysql mysql     8192 Jun  4 00:11 seahub_db

但为了安全起见,需要通过CLI确认路径:

代码语言:javascript
复制
#使用以下命令登入数据库
[root@mariadb-t1 ~]# mysql -u root -p
Enter password:
 
#检查data目录路径
MariaDB [(none)]> select @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

然后关闭所有需要用到mariadb的程序,再执行以下命令关闭mariadb:

代码语言:javascript
复制
[[email protected] ~]# systemctl stop mariadb

一定要确认mariadb已经安全地关闭,否则很有可能会使数据库损坏:

代码语言:javascript
复制
[[email protected] ~]# systemctl status mariadb.service
● mariadb.service - MariaDB 10.1.33 database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/mariadb.service.d
└─migrated-from-my.cnf-settings.conf
Active: inactive (dead) since Mon 2018-06-04 22:34:35 CST; 38s ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Process: 6421 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 6393 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 6372 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
Process: 6370 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Main PID: 6393 (code=exited, status=0/SUCCESS)
Status: "MariaDB server is down"

Jun 04 00:45:55 mariadb-t1 systemd[1]: Started MariaDB 10.1.33 database server.
Jun 04 22:34:32 mariadb-t1 systemd[1]: Stopping MariaDB 10.1.33 database server...
Jun 04 22:34:32 mariadb-t1 mysqld[6393]: 2018-06-04 22:34:32 140630452087552 [Note] /usr/sbin/mysqld: Normal shutdown
Jun 04 22:34:32 mariadb-t1 mysqld[6393]: 2018-06-04 22:34:32 140630452087552 [Note] Event Scheduler: Purging the queue. 0 events
Jun 04 22:34:32 mariadb-t1 mysqld[6393]: 2018-06-04 22:34:32 140629698934528 [Note] InnoDB: FTS optimize thread exiting.
Jun 04 22:34:32 mariadb-t1 mysqld[6393]: 2018-06-04 22:34:32 140630452087552 [Note] InnoDB: Starting shutdown...
Jun 04 22:34:33 mariadb-t1 mysqld[6393]: 2018-06-04 22:34:33 140630452087552 [Note] InnoDB: Waiting for page_cleaner to finish flushing of buffer pool
Jun 04 22:34:35 mariadb-t1 mysqld[6393]: 2018-06-04 22:34:35 140630452087552 [Note] InnoDB: Shutdown completed; log sequence number 2940637
Jun 04 22:34:35 mariadb-t1 mysqld[6393]: 2018-06-04 22:34:35 140630452087552 [Note] /usr/sbin/mysqld: Shutdown complete
Jun 04 22:34:35 mariadb-t1 systemd[1]: Stopped MariaDB 10.1.33 database server.

注意

一定要确认最后一行出现了以上内容,否则请不要进行迁移的工作。

# 2.迁移

再三确认mariadb已经安全地关闭后,在目标路径建立新的data文件夹,在这里我以以下路径作为示例:

代码语言:javascript
复制
/mysql_database

在根目录下新建一个名为mysql_database的文件夹,并将所有权与组修改为mysql:

代码语言:javascript
复制
#新建目录
[[email protected] ~]# mkdir /mysql_database
 
#修改权限
[[email protected] ~]# chown mysql:mysql /mysql_database

然后将原data目录中的所有文件同步或复制到新的目录中,在这里需要注意保留相关文件的权限。为此,这里有两种方法:

代码语言:javascript
复制
#使用cp命令复制
[[email protected] ~]# cp -rp /var/lib/mysql/* /mysql_database/
 
#使用rsync命令同步
[[email protected] ~]# rsync -av /var/lib/mysql/* /mysql_database/

如果使用cp命令则需要使用“-p”选项,以便保留文件的属性;如果使用rsync则需要使用“-a”选项,同时建议使用“-v”选项以便观察同步进度。

以上命令选一即可,完成后即可查看相关文件的属性:

代码语言:javascript
复制
#新目录中文件的属性
[[email protected] ~]# ll /mysql_database/
total 176184
-rw-rw---- 1 mysql mysql    16384 Jun  4 22:34 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Jun  4 22:34 aria_log_control
drwx------ 2 mysql mysql     4096 Jun  4 00:10 ccnet_db
drwx------ 2 mysql mysql     4096 Jun  4 00:11 ejbca
-rw-rw---- 1 mysql mysql 79691776 Jun  4 22:34 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Jun  4 22:34 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Jun  4 00:01 ib_logfile1
-rw-rw---- 1 mysql mysql        0 Jun  4 00:03 multi-master.info
drwx--x--x 2 mysql mysql     4096 Jun  4 00:01 mysql
drwx------ 2 mysql mysql       19 Jun  4 00:01 performance_schema
drwx------ 2 mysql mysql     4096 Jun  4 00:11 seafile_db
drwx------ 2 mysql mysql       19 Jun  4 00:10 seafile_t1
drwx------ 2 mysql mysql     8192 Jun  4 00:11 seahub_db
 
#原目录中文件的属性
[[email protected] ~]# ll /var/lib/mysql.bak/
total 176176
-rw-rw---- 1 mysql mysql    16384 Jun  4 00:13 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Jun  4 00:13 aria_log_control
drwx------ 2 mysql mysql     4096 Jun  4 00:10 ccnet_db
drwx------ 2 mysql mysql     4096 Jun  4 00:11 ejbca
-rw-rw---- 1 mysql mysql 79691776 Jun  4 00:13 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Jun  4 00:13 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Jun  4 00:01 ib_logfile1
-rw-rw---- 1 mysql mysql        0 Jun  4 00:03 multi-master.info
drwx--x--x 2 mysql mysql     4096 Jun  4 00:01 mysql
drwx------ 2 mysql mysql       19 Jun  4 00:01 performance_schema
drwx------ 2 mysql mysql     4096 Jun  4 00:11 seafile_db
drwx------ 2 mysql mysql       19 Jun  4 00:10 seafile_t1
drwx------ 2 mysql mysql     8192 Jun  4 00:11 seahub_db

确认无误后,即可将原目录重命名:

代码语言:javascript
复制
[[email protected] ~]# mv /var/lib/mysql /var/lib/mysql.bak

注意!在确认迁移成功之前请不要删除原目录,也不要使用mv命令将原目录移动至新路径中!!!

# 3.配置

完成数据的迁移后还不能启动,还需要修改mariadb的配置文件,以便让mariadb知道自己的data目录。为此,我们需要在以下文件中添加几行内容:

代码语言:javascript
复制
#打开文件
[[email protected] ~]# vim /etc/my.cnf
 
#在[mysqld]块中添加以下内容
[mysqld]
datadir=/mysql_database/
socket=/mysql_database/mysql.sock

因为服务器的socket路径变了,为方面本地client的使用方便,还需要修改client的配置文件,以便让client知道socket的路径:

代码语言:javascript
复制
[[email protected] ~]# vim /etc/my.cnf
# 添加以下内容
[client]
socket=/mysql_database/mysql.sock
port=3306

# 4.修改service

打开service文件

代码语言:javascript
复制
vi /usr/lib/systemd/system/mariadb.service

找到

代码语言:javascript
复制
ProtectHome=true

修改为

代码语言:javascript
复制
ProtectHome=false

执行命令

代码语言:javascript
复制
systemctl daemon-reload

systemctl start mariadb

# 5.启动MariaDB

执行命令

代码语言:javascript
复制
[[email protected] ~]# systemctl restart mariadb

如果一切正常,那么通过以下命令即可发现mariadb处于运行状态:

代码语言:javascript
复制
[[email protected] ~]# systemctl status mariadb

# 参考文档

修改与迁移mariadb的data文件夹

Can‘t create test file /home/mysql/data1/localhost.lower-test

# 其他

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=xx3sgbvuw66m

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 前言
  • # 1.准备
  • # 2.迁移
  • # 3.配置
  • # 4.修改service
  • # 5.启动MariaDB
  • # 参考文档
  • # 其他
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档