خطأ MySQL 1005 (Hy000): لا يمكن إنشاء جدول "TMP" (Errno: 13)
-
21-09-2019 - |
سؤال
أقوم بتشغيل mysql على Ubuntu 9.10 ، وهي عملية MySQL تعمل كجذر ، أنا أستخدم حساب الجذر عند التسجيل إلى MySQL ، والتي أعطيتها جميع الامتيازات ، أنا أستخدم ديسيبل الخاص بي (وليس MySQL) ، يمكنني إنشاء جدول ، لكن عندما أحاول إنشاء جدول مؤقت أحصل على هذا الخطأ:
خطأ 1005 (Hy000): لا يمكن إنشاء جدول "TMP" (Errno: 13)
لهذا الاستعلام:
إنشاء جدول مؤقت TMP (ID int) ؛
لدي مساحة كبيرة في محرك الأقراص الثابتة ، يتم منح جميع الأذونات (أيضًا VAR/LIB/MYSQL أذونات MySQL).
اي فكرة؟ شكرا ، كوبي
المحلول 2
حسنًا ... في /etc/mysql/my.cnf ، يوجد مجلد "TMP" للاستخدام الذي هو /tmp (من الجذر) على أنه افتراضي .. وليس لديهم امتيازات mySQL. CHMOD 0777 /TMP سوف يقوم بالخدعة
نصائح أخرى
كان لدي نفس القضية قبل أسبوعين. كان مجلد قاعدة البيانات على نظام الملفات مملوكًا للمستخدم الخطأ. بسيط chown -R mysql:mysql /var/lib/mysql/database_name
هل الحيلة!
يتم شرح كل شيء هنا: http://www.dinosources.eu/2010/10/mysql-cant-create-table (إنه إيطالي ، لكنه واضح إلى حد ما)
هتافات
كان لدي خطأ أعلاه مع أذونات صحيحة على /TMP ، والسياق الصحيح ومساحة القرص الكافية على Fedora 16.
بعد يوم من تمزيق شعري ، تتبعت المشكلة وصولاً إلى إعداد في تكوين النظام لخدمة MySQL.
في /etc/systemd/system/multi-user.target.wants/mysqld.service
تحقق مما إذا كان هناك إعداد PrivateTmp=true
. يجبر هذا التغيير MySQL على استخدام الدليل الفرعي A /TMP /SystemD-NamesPace-XXXXX بدلاً من وضع الملفات مباشرة في /TMP. من الواضح أن MySQL لا يحب ذلك ويفشل بإذن من خطأ تم رفضه (13) لأي استعلام يتطلب إنشاء ملف مؤقت.
يمكنك تجاوز هذا الإعداد على النحو التالي:
cat >> /etc/systemd/system/mysqld.service << END_CONFIG
.include /lib/systemd/system/mysqld.service
[Service]
PrivateTmp=false
END_CONFIG
ثم إعادة تحميل التكوين عن طريق التشغيل: systemctl daemon-reload
وإعادة تشغيل mysql.
هل تقوم بتعيين السمة MaxNoOforDeredEdexes في config.ini؟ إنها القيمة الافتراضية هي 128 ، لذلك إذا كان لديك الكثير من الجداول لإنشاءها ، فلا يمكن إنشاء آخرها. يرى:http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-ndbd-definition.html#ndbparam-ndbd-maxnooforderededexes
واجهت نفس المشكلة اليوم على مثال Amazon Red Hat. تمكنت من أداء MySQL (من قذيفة MySQL) أو تنفيذ MySqLdump. لحل هذا ، جربت الحل الأكثر وضوحًا:
# chown root:root /tmp -v
# chmod 1777 /tmp -v
# /etc/init.d/mysqld restart
لكن هذا لم يساعد. في /var/log/mysqld.log ما زلت رأيت:
141022 10:23:35 InnoDB: Error: unable to create temporary file; errno: 13
141022 10:23:35 [ERROR] Plugin 'InnoDB' init function returned error.
141022 10:23:35 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
لقد ظهر أن Selinux هو الذي لم يسمح لـ MySQL Daemon بالكتابة إلى /TMP. لذلك ، ما فعلته هو:
# getenforce
Enforcing
للتحقق مما إذا كانت Selinux تعمل في وضع الإنفاذ (يمكنك قراءة المزيد حول هذا الموضوع هنا). كان الحل السريع والسريع لهذا هو التبديل إلى وضع Selinux المسموح به:
# setenforce 0
# getenforce
Permissive
# /etc/init.d/mysqld restart
ما سبق حل مشكلتي.
يرجى ملاحظة أنه إذا كنت تعمل على الإنتاج المتشدد ، فيجب أن تكون حذراً للغاية عند التحول من التنفيذ إلى متساهلة. يرجى أيضًا ملاحظة أنه سيتم إعادة تعيين هذا الإعداد المحدد بعد إعادة التشغيل.
كنت أعاني من هذه الأخطاء (errno: 13) وحسبتها فقط بعد النظر في/var/log/syslog ، وبالتالي فإن نصيحتي هي:
tail -f /var/log/syslog
معرفة ما إذا كان ذلك له علاقة بملفات قاعدة البيانات بعد محاولة الوصول إلى قاعدة البيانات ، في حالتي كان ذلك
apparmor=[DENIED]
مما يعني أنك بحاجة إلى التعامل مع Apparmor ، ولكن في حالتك قد يكون شيئًا آخر.
مع حالتي:
# semanage fcontext -a -t mysqld_db_t "/datadir(/.*)?"
# restorecon -Rv /datadir
#chcon -R -t mysqld_db_t /datadir
حل مشكلتي.
إذا تم تثبيت phpmyadmin مع XAMPP على Linux ، فيمكن تعيين المستخدم في هذا المسار:
sudo chown -R mysql:mysql /opt/lampp/var/mysql/my_database