ubuntu移动mysql的datadir

Introduction

数据库会随着时间的推移而增长,有时会超出文件系统上的空间。当它们位于与操作系统其余部分相同的分区上时,您还可能遇到I/O争用。RAID、网络块存储和其他设备可以提供冗余和其他需要的特性。无论您是在添加更多空间、评估优化性能的方法,还是希望利用其他存储特性,本文都将指导您重新定位MySQL的数据目录。

Prerequisites

前置条件:

  • ubuntu16.04服务器,具有非根用户和sudo特权。
  • MySQL服务器。如果你还没有安装MySQL, 可以参考之前博文的mysql的安装

STEP

  • 登录mysql查看当前的datadir
1
2
3
4
mysql -u root -p
mysql> select @@datadir;
sudo systemctl stop mysql
sudo systemctl status mysql
  • 同步现有的datadir到新的目录:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# rsync
sudo rsync -av /var/lib/mysql /mnt/data01
sudo mv /var/lib/mysql /var/lib/mysql.bak
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
$ cat /etc/mysql/mysql.conf.d/mysqld.cnf
...
datadir = /mnt/data01/mysql
...
# Configuring AppArmor Access Control Rules
sudo vim /etc/apparmor.d/tunables/alias
$ cat /etc/apparmor.d/tunables/alias
. . .
alias /var/lib/mysql/ -> /mnt/data01/mysql/
. . .
# Restart apparmor
sudo systemctl restart apparmor
  • 创建目录以通过/usr/share/mysql/mysql-systemd-start脚本的检测:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ cat /usr/share/mysql/mysql-systemd-start
...
datadir=$(get_mysql_option mysqld datadir "/var/lib/mysql")
if [ ! -d "${datadir}" ] && [ ! -L "${datadir}" ]; then
echo "MySQL data dir not found at ${datadir}. Please create one."
exit 1
fi

if [ ! -d "${datadir}/mysql" ] && [ ! -L "${datadir}/mysql" ]; then
echo "MySQL system database not found in ${datadir}. Please run mysqld --initialize."
exit 1
fi
...
# 创建目录,根据自己的datadir决定
sudo mkdir /var/lib/mysql/mysql -p
  • 验证是否更改成功
1
2
3
4
5
6
7
8
9
10
11
12
13
sudo systemctl start mysql
sudo systemctl status mysql
mysql -u root -p
mysql> select @@datadir;
+----------------------------+
| @@datadir |
+----------------------------+
| /mnt/data01/mysql/ |
+----------------------------+
1 row in set (0.01 sec)
# Restart Mysql
sudo systemctl restart mysql
sudo systemctl status mysql

参考链接:

分享到