MySQLデータベースにシンボリックリンクを使用できますか?

MySQLデータベースにシンボリックリンクを使用できますか?

マイコンピュータにMySQLがインストールされており、既存の容量を最大化するには、非常に大きなテーブルを追加する必要があります。

MySQLデータを以前に外部ドライブに保存したことがありますが、読み取り/書き込みの問題により、外部ハードドライブではなくラップトップハードドライブにできるだけ多くのデータを保持することを好むので、すべてのデータの代わりにシンボリックリンクが必要です。ハードドライブに。

私は参照してくださいMySQLドキュメントこれを行うにはうまくいくようですが、私がすることは(最初に)この新しいデータベースにテーブルを作成することを許可しません(最終的に一括エクスポートの.sqlファイル/テーブルをこの新しいデータベースにインポートしたいと思います)。 。

得る:

mysql> create table test(`test` varchar(8) NOT NULL);
    ERROR 1030 (HY000): Got error 168 - 'Unknown (generic) error from engine' from storage engine

エラーログには多くの内容が表示されず、次の警告のみが表示されます。

chris@chris-X1C6:/var/log/mysql$ cat error.log
2024-02-26T21:36:16.697730Z 19 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'

mysqlMySQL 8でシンボリックリンクが開いていることを確認し、すべての適用可能なディレクトリの所有者を確認し、各場所に十分なスペースがあることを確認しましたが、まだこのエラー168が発生します。私は何を見逃していますか?必要に応じて、Ubuntu 22.04でMySQL 8.0を実行します。

関連の詳細:

chris@chris-X1C6:/var/log/mysql$ df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.6G  4.1M  1.6G   1% /run
/dev/nvme0n1p6  173G  153G   12G  93% /
tmpfs           7.7G   31M  7.7G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
efivarfs        154K   52K   98K  35% /sys/firmware/efi/efivars
tmpfs           7.7G     0  7.7G   0% /run/qemu
/dev/nvme0n1p4   60G  769M   60G   2% /media/chris/Share
/dev/nvme0n1p1  256M   35M  222M  14% /boot/efi
/dev/sdc2       4.6T   36K  4.3T   1% /media/chris/F
/dev/sda1       932G  287G  646G  31% /media/chris/T7
/dev/sdb2       4.6T  4.3T  260G  95% /media/chris/E
tmpfs           1.6G   96K  1.6G   1% /run/user/1000


chris@chris-X1C6:/var/lib/mysql$ ll --ignore=binlog*
total 1790432
-rw-rw-rw-  1 mysql mysql      1709 Dec  5  2022  ca-key.pem
-rw-rw-rw-  1 mysql mysql      1112 Dec  5  2022  ca.pem
-rw-rw-rw-  1 mysql mysql      1705 Dec  5  2022  server-key.pem
-rw-rw-rw-  1 mysql mysql      1112 Dec  5  2022  server-cert.pem
-rw-rw-rw-  1 mysql mysql      1705 Dec  5  2022  client-key.pem
-rw-rw-rw-  1 mysql mysql      1112 Dec  5  2022  client-cert.pem
-rw-rw-rw-  1 mysql mysql      1705 Dec  5  2022  private_key.pem
-rw-rw-rw-  1 mysql mysql       452 Dec  5  2022  public_key.pem
drwxrwxrwx  2 mysql mysql      4096 Dec  5  2022  sys/
drwxrwxrwx  2 mysql mysql      4096 Dec 14  2022  fu/
drwxrwxrwx  2 mysql mysql      4096 Dec 21  2022  eq/
drwxrwxrwx  2 mysql mysql      4096 May  8  2023  performance_schema/
-rw-rw-rw-  1 mysql mysql         0 Jan 26 17:44  mysql.sock
-rw-rw-rw-  1 mysql mysql         0 Jan 26 17:44  mysql.pid
-rw-rw-rw-  1 mysql mysql         0 Jan 31 06:40  debian-5.7.flag
drwxrwxrwx  2 mysql mysql      4096 Jan 31 06:40  mysql/
-rw-rw-rw-  1 mysql mysql         6 Jan 31 06:40  mysql_upgrade_info
lrwxrwxrwx  1 root  root         14 Feb 13 22:31  F -> /media/chris/F/
drwxr-xr-x 83 root  root       4096 Feb 17 09:46  ../
-rw-rw-rw-  1 mysql mysql   8585216 Feb 20 17:00 '#ib_16384_1.dblwr'
lrwxrwxrwx  1 mysql mysql        23 Feb 20 19:27  op -> /media/chris/F/mysql/op/
-rw-r-----  1 mysql mysql        56 Feb 20 19:28  auto.cnf
-rw-r-----  1 mysql mysql      3272 Feb 21 11:22  ib_buffer_pool
drwxrwxrwx  2 mysql mysql      4096 Feb 22 14:31 '#innodb_temp'/
drwxrwxrwx  2 mysql mysql      4096 Feb 22 14:32 '#innodb_redo'/
-rw-r-----  1 mysql mysql         5 Feb 22 14:32  chris-X1C6.pid
-rw-r-----  1 mysql mysql  12582912 Feb 22 14:32  ibtmp1
-rw-rw-rw-  1 mysql mysql 855638016 Feb 22 15:31  undo_002
drwxrwxrwx  9 mysql mysql      4096 Feb 26 00:00  ./
-rw-rw-rw-  1 mysql mysql 838860800 Feb 26 13:37  undo_001
-rw-rw-rw-  1 mysql mysql  79691776 Feb 26 13:37  ibdata1
-rw-rw-rw-  1 mysql mysql    196608 Feb 26 13:37 '#ib_16384_0.dblwr'
-rw-rw-rw-  1 mysql mysql  37748736 Feb 26 13:37  mysql.ibd

chris@chris-X1C6:/var/lib/mysql$ ls -lad /media/chris/F/mysql/op /var/lib/mysql/op
drwxrwxrwx 2 mysql mysql 4096 Feb 20 18:34 /media/chris/F/mysql/op
lrwxrwxrwx 1 mysql mysql   23 Feb 20 19:27 /var/lib/mysql/op -> /media/chris/F/mysql/op

答え1

私はMySQL v5.6のInnoDBテーブルを使ってこれをしました。空のテーブルを作成してmysqldを終了した後、十分なスペースを持つファイルシステムにファイルを移動し、移動したファイルへのシンボリックリンクを設定した後、mysqldを再起動しました。

ファイルを移動するディレクトリは、mysqldが実行されているユーザーが読み書きできることを確認し、その場所までのパスにあるディレクトリは、mysqldユーザーが読み取りおよび実行できることを確認する必要があります。 (おそらく実行可能でなければならないようですが、覚えていません)

私が覚えているもう一つのことは、mysqldがファイルシステムを使用してALTER TABLE操作を実行することです(通常、新しいファイルの作成、行を新しいファイルにコピーし、古いファイルと新しいファイルのファイル名を変更してから古いファイルを削除する)です。 (大きなファイル)は保存されますが、テーブルデータに対するその他の操作は保存されない場合があります。一時ファイル(および一時テーブル)を生成するソートまたはグループ化は、mysqld標準準備領域の一時ファイルに保存されます。これは、テーブルファイルを移動する大規模ファイルシステムではない可能性があります。

上記の経験はおそらく8〜10年前に起こったでしょう。私は最新バージョンのMySQLがまだこのように動作すると思いますが、現在のドキュメントと現在の経験(他の人が経験を共有している場合)に従う方が良いです。

関連情報