マイコンピュータに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'
mysql
MySQL 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がまだこのように動作すると思いますが、現在のドキュメントと現在の経験(他の人が経験を共有している場合)に従う方が良いです。