mysql,重新定位单个数据库与整个数据目录

mysql,重新定位单个数据库与整个数据目录

I need to relocate mysql customer databases to another disk, for the purposes of:

 1. Separation of user data from system files
 2. Ease of backing up system and user data separately
 3. Ease of upgrading the system

The following articles were helpful:

  [how-to-move-mysql-datadir-to-another-drive][1]
  [move-a-mysql-database-to-another-location][2]

Running on a ubuntu-18 system, it appears the innodb_file_per_table variable is set by default:

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_%';
...
| innodb_file_per_table                    | ON 
...

(Same results without the GLOBAL)

I can't find any reference to innodb_file_per_table in any configuration files; the only file with much in it is

  /etc/mysql/mysql.conf.d/mysqld.cnf

I'm concerned about what is still being stored in the files

  /var/lib/mysql/ibdata1
                /ib_logfileN

I've noticed that simply accessing a database causes these to be updated.

My questions are:

  1. 如果我仅移动客户数据库(到单独的磁盘),并且系统磁盘丢失并需要从头开始重新创建,会丢失任何内容吗?

  2. 我最好将所有数据库(包括(mysql、performance_schema 和 sys))移动到单独的磁盘吗?

  3. 我是否最好将整个数据目录移动到单独的磁盘,并通过 /etc/mysql/mysql.conf.d/mysqld.cnf 中的“datadir”变量指向它?

  4. 会产生什么后果不是如果系统磁盘丢失是否使用选项3?

答案1

最好将 MySQL 的所有表移到另一个磁盘。任何试图拆分“客户”的尝试都会增加复杂性并使您的目标变得困难。(如果这成为一项要求,我们可以进一步讨论。)

本质上,此移动留下的唯一文件是配置文件。您提到了/etc/mysql/mysql.conf.d/mysqld.cnf,但那里可能还有其他配置文件。

其他地方有一个更大的目录,其中包含一堆文件,以及与您创建的“数据库”相对应的子目录。我只需移动整个树即可。如果您使用的是基于 Linux 的操作系统,则使用从旧位置到新位置的符号链接。无需明确更改配置。

然后,如果任何一个磁盘崩溃,您就无法获取数据。我的观点是,摆弄文件和目录并不一定能让您更接近“安全”。

相反,专注于备份。和/或“复制”。后者需要额外的服务器并提供完整的数据副本。这样,如果任一服务器崩溃,您也不会有任何损失。

LVM 是另一种备份技术;拥有数据库磁盘的好处。但这增加了许多复杂性。

建议你多读一些书,保持开放的心态。你会发现很多与你的想法直接相符的东西。

相关内容