سؤال

أقوم بتشغيل 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top