我正尝试在here之后使用CREATE TABLE
选项来data directory
。
我正在使用MariaDB 5.5,命令列表在下面...
MariaDB [test]> select version();
+----------------+
| version() |
+----------------+
| 5.5.60-MariaDB |
+----------------+
1 row in set (0.00 sec)
MariaDB [test]> select @@datadir;
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)
MariaDB [test]> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
MariaDB [test]> create table foo(c1 int) data directory='/home/mysql';
Query OK, 0 rows affected, 1 warning (0.36 sec)
MariaDB [test]> \! ls -al /var/lib/mysql/test
drwx------. 2 mysql mysql 47 4월 24 18:02 .
drwxr-xr-x. 8 mysql mysql 4096 4월 24 17:55 ..
-rw-rw----. 1 mysql mysql 61 4월 24 17:55 db.opt
-rw-rw----. 1 mysql mysql 8556 4월 24 18:02 foo.frm
-rw-rw----. 1 mysql mysql 98304 4월 24 18:02 foo.ibd
MariaDB [test]> show warnings;
+---------+------+---------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------+
| Warning | 1618 | <DATA DIRECTORY> option ignored |
+---------+------+---------------------------------+
1 row in set (0.00 sec)
我发现--skip-symbolic-link
被禁用,我在symbolic-links=TRUE
中用my.cnf
重新启动了mysqld
MariaDB [test]> show variables like 'have_symlink';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_symlink | YES |
+---------------+-------+
1 row in set (0.00 sec)
MariaDB [test]> drop table foo;
Query OK, 0 rows affected (0.03 sec)
MariaDB [test]> create table foo(c1 int) data directory='/external_data_dir';
Query OK, 0 rows affected (0.16 sec)
MariaDB [test]> \! ls -al /external_data_dir
total 4
drwxr-xr-x. 2 mysql mysql 6 4월 25 13:36 .
dr-xr-xr-x. 18 root root 4096 4월 25 13:36 ..
MariaDB [test]> \! ls -al /var/lib/mysql/test
total 212
drwx------. 2 mysql mysql 47 4월 25 13:40 .
drwxr-xr-x. 8 mysql mysql 4096 4월 25 13:33 ..
-rw-rw----. 1 mysql mysql 61 4월 24 17:55 db.opt
-rw-rw----. 1 mysql mysql 8556 4월 25 13:40 foo.frm
-rw-rw----. 1 mysql mysql 98304 4월 25 13:40 foo.ibd
我认为它无法正常运行。我想念什么?
谢谢。
答案 0 :(得分:1)
----- 2012-08-07 5.6.6里程碑9-添加或更改了功能-InnoDB -----
InnoDB现在支持CREATE TABLE语句的DATA DIRECTORY ='directory'子句,它使您可以在MySQL数据目录之外的位置创建InnoDB file-per-table表空间(.ibd文件)。 / p>
有关其他信息,请参见Specifying the Location of a Tablespace。
您要问的是MariaDB 5.5,它早于更改。回顾过去,MariaDB 5.5相当接近于MySQL 5.5,因此我认为MariaDB在您的版本中没有该功能。推荐您升级。 10.0 可能具有此功能,以及10.1和10.2和10.3。
请记住,pip install git+https://github.com/user_name/repo_name
可以在DATA DIRECTORY
上使用,但不能在CREATE TABLE
上使用。
我看到我的答案与MariaDB CREATE TABLE doc不同。我不能说出差异在哪里。消息“ ALTER TABLE
选项被忽略”表示我是对的。
答案 1 :(得分:0)
问题很可能是由于mysql / mariadb无权写入该/ external_data_dir
的事实而产生的解决方案在很大程度上取决于您使用的操作系统。
首先,无论Linux家族如何,都要确保该目录存在并且由用户mysql
拥有:
mkdir /external_data_dir
chown -R mysql.mysql /external_data_dir
现在,如果您的Linux是RHEL / CentOS / Fedora,则需要检查是否已启用SELinux,如果是,则将其禁用(不推荐)或设置该目录的适当安全上下文(推荐的方法)< / p>
# check if SELinux is enabled
getenforce
# if it outputs 'Enforcing' then SELinux is enabled
# set proper SELinux context
chcon -R -t mysqld_db_t /external_data_dir
# you could disable SELinux with the command below but it is not recommended
setenforce 0
您可以通过以下链接了解有关SELinux和MySQL / MariaDB的更多信息:https://blogs.oracle.com/jsmyth/selinux-and-mysql
如果您的Linux是Debian / Ubuntu,则可能需要检查AppArmor设置,这与SELinux等效。我没有使用AppArmor的经验,但只能告诉我它也可以完全禁用或正确设置以允许mysql访问非标准目录。 首先,您可以检查以下链接:https://blogs.oracle.com/jsmyth/apparmor-and-mysql
您将需要root / sudo访问权限才能运行上述所有内容。