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:
如果我仅移动客户数据库(到单独的磁盘),并且系统磁盘丢失并需要从头开始重新创建,会丢失任何内容吗?
我最好将所有数据库(包括(mysql、performance_schema 和 sys))移动到单独的磁盘吗?
我是否最好将整个数据目录移动到单独的磁盘,并通过 /etc/mysql/mysql.conf.d/mysqld.cnf 中的“datadir”变量指向它?
会产生什么后果不是如果系统磁盘丢失是否使用选项3?
答案1
最好将 MySQL 的所有表移到另一个磁盘。任何试图拆分“客户”的尝试都会增加复杂性并使您的目标变得困难。(如果这成为一项要求,我们可以进一步讨论。)
本质上,此移动留下的唯一文件是配置文件。您提到了/etc/mysql/mysql.conf.d/mysqld.cnf
,但那里可能还有其他配置文件。
其他地方有一个更大的目录,其中包含一堆文件,以及与您创建的“数据库”相对应的子目录。我只需移动整个树即可。如果您使用的是基于 Linux 的操作系统,则使用从旧位置到新位置的符号链接。无需明确更改配置。
然后,如果任何一个磁盘崩溃,您就无法获取数据。我的观点是,摆弄文件和目录并不一定能让您更接近“安全”。
相反,专注于备份。和/或“复制”。后者需要额外的服务器并提供完整的数据副本。这样,如果任一服务器崩溃,您也不会有任何损失。
LVM 是另一种备份技术;拥有数据库磁盘的好处。但这增加了许多复杂性。
建议你多读一些书,保持开放的心态。你会发现很多与你的想法直接相符的东西。