mariadb создать каталог данных таблицы не работает - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь 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 отключен, и перезапустил mysqld с symbolic-links=TRUE в my.cnf

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

Не думаю, что он работает должным образом.Чего мне не хватает?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 16 мая 2019

----- 2012-08-07 5.6.6 Milestone 9 - Функциональность добавлена ​​или изменена - InnoDB -----

InnoDB теперь поддерживает каталог DATA DIRECTORY = ''оператора CREATE TABLE , который позволяет создавать табличные пространства InnoDB file-to-table (файлы .ibd) в расположении вне каталога данных MySQL.

Для получения дополнительной информации см. Указание расположения табличного пространства .

Вы спрашиваете о MariaDB 5.5, которая предшествует этому изменению.В те давние времена MariaDB 5.5 довольно тщательно отслеживал MySQL 5.5, поэтому я не думаю, что MariaDB имела функцию в вашей версии.Рекомендую обновить.10.0 , вероятно, имеет функцию, а также 10.1 и 10.2 и 10.3.

И имейте в виду, что DATA DIRECTORY может использоваться на CREATE TABLE, но не ALTER TABLE.

Я вижу, что мой ответ не согласуется с MariaDB CREATE TABLE doc ;Я не могу сказать, где расхождение.Сообщение «<DATA DIRECTORY> опция игнорируется» подразумевает, что я прав.

0 голосов
/ 25 апреля 2019

Скорее всего, проблема вызвана тем, что mysql / mariadb не имеет прав на запись в этот / external_data_dir

Решение в значительной степени зависит от используемой вами ОС.

Прежде всего, независимо от семейства Linux, убедитесь, что каталог существует и принадлежит пользователю mysql:

mkdir /external_data_dir
chown -R mysql.mysql /external_data_dir

Теперь, если ваш Linux - RHEL / CentOS / Fedora, вам нужно будет проверить, включен ли SELinux, и если да, то вы либо отключите его (не рекомендуется), либо установите соответствующий контекст безопасности этого каталога (рекомендуемый подход)

# 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 для запуска всего вышеперечисленного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...