ত্রুটি: টেবিল xxx এর টেবিলস্পেস বিদ্যমান। ইমপোর্টের আগে টেবিল স্পেসটি ডিস্কার্ড করুন


134

আমি মাইএসকিউএলে মোটামুটি নতুন এবং আমি একটি চমত্কার আকর্ষণীয় ত্রুটি পেয়ে যাচ্ছি যার ভিত্তিতে আমি গুগল এবং স্ট্যাকওভারফ্লো অনুসন্ধানের মাধ্যমে কোনও সহায়তা পাই না।

আমি ম্যাকএস 10.8.3 এ মাইএসকিউএল 5.6.10 এর একটি স্থানীয় সার্ভার চালাচ্ছি এবং মাইএসকিউএল-এর নাভিচ্যাট প্রয়োজনীয় মাধ্যমে আমার ডাটাবেস পরিচালনা করি।

আমি যে ত্রুটিটি পেয়েছি তা হল যে আমার ডেটাবেস চালানো এবং পরিচালনা করার পরে বেশ কয়েকদিন / সপ্তাহের জন্য কিছু ট্রিগার করে (এটি অসম্পূর্ণভাবে দেখা যায়) আমি নাভিচ্যাট থেকে কোয়েরি ব্যবহার করে তৈরি করা কিছু টেবিলগুলি মুছুন।

আমি যখন এই টেবিলগুলি ব্যবহার করে অনুসন্ধান চালানোর চেষ্টা করি, তখন নাভিচ্যাট আমাকে সতর্ক করে দেয় যে নির্দিষ্ট টেবিলটির অস্তিত্ব নেই। এতদূর ভাল - এখানে ভাল অংশটি আসে:

আমি যখন টেবিলটি তৈরি করার চেষ্টা করি, যেমন "টেম্প" নামকরণ করা হয়েছে, এটি আগে ছিল, আমি নিম্নলিখিত ত্রুটি বার্তাটি পেয়েছি:

Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.

তবে, আমি যদি টেবিলটি ফেলে দেওয়ার চেষ্টা করি বা ব্যবহার করে এই টেবিলটির টেবিল স্পেসটি ফেলে দেওয়ার চেষ্টা করি

DROP TABLE temp;
ALTER TABLE temp DISCARD TABLESPACE;

আমি নিম্নলিখিত ত্রুটি বার্তা পেয়েছি:

Error : Unknown table 'database.temp'
Error : Table 'database.temp' doesn't exist

সুতরাং এর মানে হল যে আমাকে টেবিলের স্থানটি ফেলে দেওয়ার পরামর্শ দেওয়া হচ্ছে তবে যখন আমি এটি করার চেষ্টা করি তখন টেবিলের অস্তিত্ব থাকে না। এটি কি সম্ভব যে আলাদা আলাদা জায়গায় এই টেবিলের কিছু ধরণের অবশেষ রয়েছে যেখানে ডিস্কার্ড ক্যোয়ারী চেক করছে না? এবং কারও কি এমন ধারণা রয়েছে যা এই সমস্ত কিছুর ট্রিগার করতে পারে - পুরোপুরি এলোমেলোভাবে যেমন মনে হয় তেমন?

যেমনটি আমি বলেছিলাম, আমি এই বিষয়ে নতুন এবং বেশ নির্বোধ। আমি সন্দেহ করি যে আমার ল্যাপটপটি পুনরায় বুট করা, অর্থাৎ আমার স্থানীয় মাইএসকিউএল সার্ভারটি পুনরায় সেট করা, বা ব্যবহারকারীর অনুমতি অধিকারগুলি এর সাথে করতে পারে, তবে আমি এখানে কেবল অনুমান করছি।


আপনি এই জাতীয় ত্রুটির জন্য কিছু সমাধান পরীক্ষা করতে পারেন। কোডপেকার.com
laravel-

উত্তর:


123

এখানে কিছুটা দেরি হলেও সাধারণত আমি দেখেছি এই সমস্যাটি যখন ঘটে যখন আপনি 'ইনোডাব_ফিল_পিটার_ টেবিল' মোডে চলার সময় 'টেবিল স্পেস পূর্ণ' ত্রুটি পান। খুব বেশি বিশদে না গিয়ে (আরও এখানে ) ডাটাবেস সার্ভারের টেবিল স্পেসটি ইনোডাব_ডাটা_ফিল_পথ সেটিং দ্বারা সংজ্ঞায়িত করা হয়েছে এবং ডিফল্টরূপে এটির চেয়ে ছোট। এমনকি আরও বড় আকারে তৈরি করা হলেও, 'টেবিলস্পেস পূর্ণ' এখনও বৃহত্তর প্রশ্নগুলির সাথে ঘটতে পারে এবং যেমন (প্রচুর নন-টেবিল 'স্টাফগুলি সেখানে সংরক্ষণ করা হয়, লোগো, ক্যাশে ইত্যাদি পূর্বাবস্থায় ফিরিয়ে আনা হয়)।

যাইহোক, আমি দেখতে পেয়েছি যে আপনি ওএস ডিরেক্টরিতে যেখানে প্রতি টেবিলে ফাইলগুলি সঞ্চিত আছে, ওএসএক্সে / var / lib / mysql ডিফল্টরূপে, / usr / স্থানীয় / ভার / মাইএসকিএল হোমব্রিউ আইআর্কির সাথে সন্ধান করলে আপনি একটি খুঁজে পাবেন এতিম টেবিলনাম.আইবিডি ফাইল এটি সাধারণ সহকর্মী টেবিলনাম.ফ্রিএম ফাইল ছাড়াই। যদি আপনি .bd ফাইলটিকে কোনও নিরাপদ অস্থায়ী স্থানে সরিয়ে থাকেন (কেবল নিরাপদ থাকতে) যা সমস্যার সমাধান করতে পারে।

$ ls /var/lib/mysql

table1.frm
table1.idb
table2.frm
table2.ibd
table3.idb <- problem table, no table3.frm
table4.frm
table4.idb

$ mkdir /tmp/mysql_orphans
$ mv /var/lib/mysql/table3.ibd /tmp/mysql_orphans/

তবে একটি সতর্কতামূলক বিষয়টি নিশ্চিত করুন যে সমস্যাটি আসলে কী কারণে সৃষ্টি হচ্ছে, যেমন দীর্ঘতর চলমান ক্যোয়ারী, লক টেবিল ইত্যাদি ... সাফ হয়ে গেছে। অন্যথায় আপনি যখন দ্বিতীয়বার চেষ্টা করবেন তখন আপনি অন্য অনাথ .আইবিডি ফাইলটি শেষ করবেন।


5
আমার মাইএসকিউএল-ডেটা ডিরেক্টরিটি ওএস এক্স-তে ছিল ইয়োসেমাইটের /usr/local/mysql/dataপরিবর্তে সঞ্চিত ছিল /var/lib/mysql/। অন্যথায় পুরোপুরি সমস্যার সমাধান।
অ্যালেক্স হপ্পেন

13
আমার ক্ষেত্রে এটি কাজ করে না ... আমি অনাথ আইডিবি ফাইলটি মুছে ফেলেছিলাম ... এবং আমি একই নামটি দিয়ে টেবিলটি পুনরায় তৈরি করতে গিয়ে আমার একটি বার্তা পেয়েছিল যে টেবিলটি ইতিমধ্যে বিদ্যমান (যার জন্য আমি .db মুছে ফেলেছি) ফাইল) ... উপরের ক্রিয়াকলাপের পরে একটি নতুন অনাথ .আইডিবি ফাইলটি ডিয়ারে তৈরি করা হয়েছিল ... খুব অদ্ভুত ... আমি কী অনুমান করতে পারি তা সত্যই আমি জানি না।
দিমিত্রিস পাপেজার্জিও

4
দিমিট্রিসের মতো আমারও একই সমস্যা আছে - আমাকে ডাটাবেস থেকে একটি ডাম্প তৈরি করতে হয়েছিল, ডাটাবেসটি ফেলে দিয়ে ডাম্প থেকে পুনরুদ্ধার করতে হয়েছিল।
গিফ্রিড

1
@ জিরিফ্রিড ফাইলটি মুছে ফেলার পরে মাইএসকিউএল প্রক্রিয়াটি বন্ধ করে দিয়ে শুরু করার পরে এটি আমার পক্ষে এতক্ষণ কাজ করে।
মের

2
@ ডিমিট্রিপপেজার্জিও আমার পক্ষে এতক্ষণ কাজ করেছিল যতক্ষণ না আমি ফাইলটি মোছার পরে মাইএসকিউএল প্রক্রিয়া বন্ধ করে দিয়েছি।
মের

75

জ্যাম্প এবং ম্যাম্প ব্যবহারকারীরা

একটি ডাটাবেস আমদানি করার সময় একই ত্রুটি হয়েছিল (এটি খালি করার পরে) ট্রাই মাইএসকিউএল। আমি দেখতে পেলাম যে আমার কাছে একটি tablename.ibdফাইল ছিল এবং অন্য সমস্ত মুছে ফেলা হয়েছে। আমি এটিকে ম্যানুয়ালি মুছে ফেলেছি mysql/data/database_nameএবং ত্রুটিটি চলে গেছে।


এই উত্তরটি কি এমন লোকদের সহায়তা করেছিল যেগুলি এক্সএএমপিপি ব্যবহার করে না?
টেকনোট্রনিক

3
আমার থেকে থাম্বস আপ! ভাল কাজ করেছে। যাইহোক, আমার জন্য ফোল্ডারের পথে কিছুটা হালকা আপডেট করার অনুমতি দিন (এটির চেষ্টা করে বিভ্রান্ত হয়ে পড়েছেন
মাইএসকিএল

এটি ব্যবহার করে লিনাক্স পুদিনায় স্টোরেজ ইঞ্জিন থেকে 168 ত্রুটি তৈরি হয়েছে, জ্যাম্প এবং ম্যাম্প ব্যবহার করা হয়নি (কোনও সমালোচনা নয়, কেবল অবহিত করা হচ্ছে)
স্টিভেন

1
কাজ করে! আমি ভাঙা একটি .ibd ফাইলটি মুছলাম এবং তারপরে আবার টেবিল তৈরি করা যাবে। উবুন্টু 16, মারিয়্যাডবি
ওয়াজা 123

একই ডকারের পক্ষে যায় (যদি ডকার ক্র্যাশ হয় বা হোস্ট পুনরায় চালু হয়, আপনার সিঙ্ক ফোল্ডারের ভিতরে আপনার শেষ তারিখ থাকতে পারে যা এই ত্রুটি সৃষ্টি করে)
স্লিক

23

WAMP [উইন্ডোজ 7 আলটিমেট x64-বিট] ব্যবহারকারীদের জন্য:

আমি ড্যানজারডেভ যা বলেছিলাম তার সাথে আমি একমত এবং তাই আমি ডাব্লুএএমএপি ব্যবহারকারীদের জন্য একটি উত্তর সরবরাহ করছি ।

দ্রষ্টব্য: প্রথমে আপনাকে আপনার .. \ WAMP \ Bin \ MySQL \ MySQL [আপনার MySQL সংস্করণ] \ ডেটা ফোল্ডারে যেতে হবে।

এখন, আপনি আপনার সমস্ত ডাটাবেসের ফোল্ডার দেখতে পাবেন

  • এটি খুলতে আপত্তিজনক টেবিল রয়েছে এমন ডাটাবেজের ফোল্ডারে ডাবল ক্লিক করুন
  • কোনও ফাইল থাকা উচিত নয় [Your offending MySQL table name].frm, পরিবর্তে একটি ফাইল থাকা উচিত[Your offending MySQL table name].ibd
  • মুছুন [Your offending MySQL table name].ibd
  • তারপরে, এটি রিসাইকেল বিন থেকেও মুছুন
  • তারপরে আপনার মাইএসকিউএল ক্যোয়ারীটি ডাটাবেসে চালান এবং আপনার কাজ শেষ হয়ে গেল

22

.idbমুছে ফেলার পরে যদি আপনি পুনরায় তৈরি করেন তবে এই উত্তরটি পড়ুন।

এটি আমার সাথে কীভাবে কাজ করেছে। আমার সাথে .idbএটি সম্পর্কিত না করেই ফাইল ছিল .frmএবং যখনই আমি .idbফাইলটি মুছি, ডাটাবেস আবার এটি পুনরায় তৈরি করে। এবং আমি মাইএসকিউএল ডকুমেন্টেশনের এক লাইনে সমাধানটি পেয়েছি ( টেবিলস্পেস অংশটি বিদ্যমান নেই )

1- অন্য কোনও ডাটাবেস ডিরেক্টরিতে একটি ম্যাচিং .frm ফাইল তৈরি করুন এবং এতিম টেবিলটি অবস্থিত যেখানে ডাটাবেস ডিরেক্টরিতে এটি অনুলিপি করুন।

2- মূল টেবিলের জন্য ড্রপ টেবিলে ইস্যু করুন। এটি সফলভাবে সারণীটি ফেলে দেবে এবং InnoDB কে .ibd ফাইলটি অনুপস্থিত ছিল এমন ত্রুটি লগতে একটি সতর্কতা মুদ্রণ করা উচিত।

আমি অন্য টেবিলের .frmফাইলটি অনুলিপি করেছি এবং এটি আমার অনুপস্থিত টেবিলের মতো রেখেছি, তারপরে একটি সাধারণ ড্রপ টেবিল ক্যোয়ারী তৈরি করে এবং ভয়েলা, এটি কাজ করে এবং টেবিলটি স্বাভাবিকভাবে বাদ পড়ে যায়!

আমার সিস্টেমটি উইন্ডোজ মারিয়াডিবি v 10.1.8 এ এক্সএএমপিপি


3
যদি এটি অন্য কারও কাছে সুস্পষ্ট না হয়: আপনি যখন .frm ফাইলটি তৈরি করেন এবং টেবিলটি ফেলে দেন, তখন .idb ফাইলটি মুছতে হবে।
নররেটজ

6
নিশ্চিত করতে পারেন, পদক্ষেপগুলি হওয়া উচিত: 1. মাইএসকিএল / পাথ / টেবিল_নাম.আইডিবি মুছুন 2. টেবিল_নাম.ফ্র্যাম যোগ করুন ৩. ড্রপ টেবিলের নাম
জেরেমি ডেনেন

এটি আমার পক্ষে কাজ করেছে। ধন্যবাদ। এফকে মুছে ফেলার সময় এবং তাত্ক্ষণিকভাবে আমি এই ত্রুটিটি পেয়েছি, আমি মাইএসকিএল বন্ধ করে দিয়েছি। আমি মনে করি এটি আমার টেবিল ডিএফ ডেটা দূষিত।
রডল্ফো ভেলাস্কো

ফাইলটি রাখার পরে মাইএসকিএল পুনরায় চালু করার কথা মনে রাখুন এবং পরে এটি ফেলে দেওয়ার চেষ্টা করুন
সৈয়দ আলী রওশন

মাইএসকিএল> ডেটা> মাইএসকিএল-তে আমার একটি .frm ফাইল দরকার। আমি কি এটিকে অনুলিপি করতে পারি?
টিমো

8

আমার ক্ষেত্রে একমাত্র কাজের সমাধান ছিল:

  1. টেবিল bad_tableইঞ্জিন তৈরি করুন = মাইসাম ...
  2. rm Bad_table.ibd
  3. ড্রপ টেবিল bad_table

আমার জন্য কাজ! [ত্রুটি] InnoDB: './dbname/tablename.ibd' ফাইলটি ইতিমধ্যে বিদ্যমান যদিও InnoDB ডেটা অভিধানে সংশ্লিষ্ট টেবিলটি বিদ্যমান ছিল না। আপনি কি এসএনকিউ কমান্ড ডিস্কার্ড ট্যাবলেট এবং আমদানি ট্যাবলেট স্পেস ব্যবহার না করেই InnoDB .ibd ফাইলগুলিকে চারপাশে স্থানান্তরিত করেছেন, বা তৈরি টেবিলের মাঝখানে মাইএসকিএলএড ক্র্যাশ করেছেন? আপনি মাইএসকিউএল এর 'ডেটাডির' এর অধীনে './dbname/tablename.ibd' ফাইলটি সরিয়ে সমস্যার সমাধান করতে পারেন।
পিড্রিয়ান

1
টেবিলস্পেস বিদ্যমান থাকায় টেবিল তৈরি করতে পারে না।
লিয়াম মিশেল

এটা আমার পক্ষে কাজ নয় আইবিডি ফাইলটি একই ইঞ্জিনের সাহায্যে টেবিলটি পুনরায় তৈরি করতে চাইছে ering
ফজর রুক্মো

8

ফেডোরায় আমি মারিয়্যাডবি 10.2.16 এ ঠিক এমনটি করেছি যখন আমার কাছে একটি টেবিল ছিল যা লগ ফাইলটিতে ঠিক একই ত্রুটি দেখিয়েছিল বলে আমি মনে করি ...

2018-07-11  9:43:58 140323764213504 [Note] InnoDB: The file './database_name/innodb_table.ibd' already exists though the corresponding table did not exist in the InnoDB data dictionary. You can resolve the problem by removing the file.
2018-07-11  9:44:29 140323764213504 [Warning] InnoDB: Tablespace 'database_name/innodb_table' exists in the cache with id 2836 != 2918

আপনার মাইলেজ এবং ত্রুটিগুলি পৃথক হতে পারে তবে আমি মনে করি মূলটি main

...already exists though the corresponding table did not exist in the InnoDB data dictionary...

ড্রপ টেবিলের সাথে টেবিল পরিবর্তনের পাশাপাশি কাজ হচ্ছে না ...

MariaDB [database_name]> drop table innodb_table;
ERROR 1051 (42S02): Unknown table 'database_name.innodb_table'

MariaDB [database_name]> alter table innodb_table discard tablespace;
ERROR 1146 (42S02): Table 'database_name.innodb_table' doesn't exist

টেবিল তৈরি করাও এর মতো ব্যর্থ হয়:

MariaDB [database_name]> create table  innodb_table(`id` int(10) unsigned NOT NULL);
ERROR 1813 (HY000): Tablespace for table '`database_name`.`innodb_table`' exists. Please DISCARD the tablespace before IMPORT

এটি ঠিক করার জন্য, আমি প্রথমে যা করেছি

create table  innodb_table2(`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.07 sec)

তারপরে / var / lib / mysql / ডাটাবেস_নাম ডিরেক্টরিতে আমি নীচে ইন্নাডব_ট্যাবিলিটি.আইবিডিটির ওভাররাইটিংকে আমাদের সমস্যার কারণ হিসাবে স্বীকার করে নিলাম

cp -a innodb_table2.frm innodb_table.frm
cp -a innodb_table2.ibd innodb_table.ibd
systemctl restart mariadb

তারপরে মাইএসকিএল কনসোলে ফিরে এসে আমি উভয় টেবিলে একটি সফল ড্রপ কমান্ড জারি করেছি

MariaDB [database_name]> drop table innodb_table;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    8
Current database: database_name

Query OK, 0 rows affected (0.08 sec)

MariaDB [database_name]> drop table innodb_table2;
Query OK, 0 rows affected (0.25 sec)

এবং সবকিছু এখন সমস্ত বর্গক্ষেত্র এবং আমি একটি একক টেবিলটি পুনরায় তৈরি করতে পারি ...

MariaDB [database_name]> create table  innodb_table (`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.08 sec)

সম্পাদনা: আমি একটি যুক্ত করতে যাচ্ছি

restorecon -Rv /var/lib/mysql/database_name 

সমস্ত সেলিনাক্সগুলি যেমনভাবে হওয়া উচিত তেমনিভাবে ডাটাবেস অনুলিপি করার পরে কমান্ড করুন, যদিও আমরা প্রায় তাৎক্ষণিকভাবে এটি ডাটাবেস থেকে মুছে ফেলছি, তবে বিকল্পটিতে আপনি কেবল দুটি সিপিতে - আর্কাইভ বা -a বিকল্পটি যুক্ত করতে পারেন কমান্ডগুলি, সুতরাং হ্যাঁ আসলে সংরক্ষণাগার বিকল্পটি এটি ছোট করে:

cp innodb_table2.frm innodb_table.frm
cp innodb_table2.ibd innodb_table.ibd
chown mysql:mysql innodb_table.frm innodb_table.ibd
chmod 660 innodb_table.frm innodb_table.ibd
restorecon -Rv /var/lib/mysql/database_name
systemctl restart mariadb

নিম্নলিখিতগুলিতে যা আমি ভাল বলে মনে করি এবং এটি সেলিনাক্স প্রসঙ্গটি ইতিমধ্যে তৈরি টেবিলের জন্য সেট করে রাখে।

cp -a innodb_table2.frm innodb_table.frm
cp -a innodb_table2.ibd innodb_table.ibd
systemctl restart mariadb

আমি সংক্ষিপ্ত তালিকার উপরের দীর্ঘতর কমান্ডের তালিকাটি প্রতিস্থাপন করেছি যা একটি * দিয়ে ছোট করা যেতে পারে


এটি আমার জন্য সেন্টোস মারিয়াডিবি 10.2.31 এ ভালভাবে কাজ করেছে। আমি এমন একটি সমাধান খুঁজছিলাম যা মাইএসকিউএল পরিষেবাটি পুনরায় আরম্ভ করার প্রয়োজন হয় না এবং এটি ছিল was কীটি ইনোনডেবি_ টেবিল 2 ফাইলের সেট (ইনোডাব_ টেবিল 2.frm এবং ইননোডবি_ টেবিল ২.আইবিডি) তৈরি করছে এবং তাদের উভয়কে ইনোডাব_ টেবিল ফাইলের উপরে রেখে দিচ্ছে।
জাস্টিন

6

আমার ক্ষেত্রে:

প্রথমে tableName.ibdআপনার ডাটাবেস ডিরেক্টরিতে মাইএসকিএল এবং দ্বিতীয় রান থেকে সরান :

ALTER TABLE tableName DISCARD TABLESPACE;
DROP TABLE tableName;

ধন্যবাদ, আমার ক্ষেত্রে, আমি 1) ডাটাবেস সার্ভারটি বন্ধ করে দিয়েছি (সার্ভিস মাইএসকিএল স্টপ) 2) সরানো আইডিবি ফাইল 3) শুরু করা ডাটাবেস সার্ভার (সার্ভিস
মাইএসকিএল

উইন্ডোজে আপনার ডাটাবেস ডিরেক্টরিটি
সিটিতে রয়েছে

4

ব্যবহারকারীর টেবিল তৈরি করার চেষ্টা করার সময় wampserver এ চালানোর ক্ষেত্রে আমি একই ত্রুটি পেয়েছি। আমি একটি ইউজার.আইবিডি ফাইল পেয়েছি এবং আমি এই ফাইলটি মুছে ফেলার পরে, আমি আবার মাইগ্রেট কমান্ড চালিয়েছি এবং এটি কার্যকর হয়েছে। আমার উইন্ডোজ মেশিনে ফাইলটি wamp / bin / mysql / mysql5.6.12 / ডেটা / মাইপ্রজেক্টে অবস্থিত।


4

সমাধান

তবে সহজ বিকল্পটি হ'ল মাইএসকিউএল পুনরায় চালু করুন, তারপরে নীচে একই চারটি পদক্ষেপ করুন:

1) created a dummy table in the database;
2) discarded its tablespace;
3) moved the .ibd file into the database folder on the system;
4) attached the tablespace back to the table

এইভাবে, ডেটা অভিধানে টেবিলস্পেস আইডি এবং ফাইলটি মিলছে; এভাবে টেবিলস্পেস আমদানি সফল হয়েছে।

এটি আপনাকে পুনরুদ্ধার প্রক্রিয়া চলাকালীন বা ফাইল স্থানান্তরকালে কিছু কিছু InnoDB "গেটছ'এর সাথে কাজ করার ক্ষেত্রে আরও বেশি আত্মবিশ্বাস দিতে পারে।

সুত্র


7
এটি কোনও একক উত্তর নয়।
নাথানিয়েল ফোর্ড

3

সমাধানের পদক্ষেপগুলি এখানে:

  1. আপনার ডাটাবেস ব্যাকআপ (ড্রপ বিকল্প এবং ডেটা সঙ্গে কাঠামো)
  2. মাইএসকিএল ইঞ্জিন পরিষেবা বন্ধ করুন
  3. মাইএসকিএল / ডেটা ভিতরে থেকে ডাটাবেস ডিরেক্টরিটি ম্যানুয়ালি সরান
  4. মাইএসকিএল ইঞ্জিন শুরু করুন
  5. আপনার দূষিত ডেটাবেস থেকে আলাদা নামের সাথে নতুন ডাটাবেস তৈরি করুন
  6. নতুন ডাটাবেসের ভিতরে কলুষিত টেবিলের নাম সহ একক টেবিল তৈরি করুন (এটি গোপনীয়তা)। এবং ঠিক একই কাঠামো সহ টেবিলটি তৈরি করা ভাল।
  7. পুরাতন কলুষিত ডাটাবেসে ডাটাবেসটির নতুন নাম দিন
  8. আপনার ব্যাকআপ পুনরুদ্ধার করুন এবং আপনার টেবিলটি ঠিকঠাক কাজ করবে।

2

এই সমস্যাটি বেশ কয়েকবার ছিল। আপনার যদি একটি বড় ডিবি থাকে এবং ব্যাকআপ / পুনরুদ্ধার এড়ানো চেষ্টা করতে চান (যোগ করা গায়ে দেওয়া টেবিল সহ), কয়েকবার পিছনে পিছনে চেষ্টা করুন:

টেবিল ড্রপ my_table;

টেবিলটি My_table ডিস্কার্ড ট্যাবলেট স্পেস;

-এবং-

rm my_table.ibd (অনাথ ডাব্লু / ও মাই / টেবিল.ফ্রিমি সংযুক্ত) / var / lib / mysql / my_db / ডিরেক্টরিতে অবস্থিত

-এবং তারপর-

টেবিল তৈরি করুন যদি উপস্থিত না থাকে my_table(...)


2

মোছা / সরানো টেবিলের নাম.আইবিডি নিশ্চিতভাবে আমার পক্ষে কাজ করে না।

আমি কীভাবে এটি সমাধান করেছি

যেহেতু আমি কলুষিত এবং অ বিদ্যমান বিদ্যমান সারণী মুছে ফেলতে যাচ্ছিলাম, আমি পিপিএইপিডমিন-> ডাটাবেস-> এক্সপোর্ট-> নির্বাচিত টেবিলগুলি ব্যাকআপ-> এক্সপোর্টে (। এসকিউএল) যেতে গিয়ে অন্যান্য টেবিলগুলির একটি ব্যাকআপ নিয়েছি।

এর পরে আমি ডাটাবেস নামের পাশের ডাটাবেস আইকনটি নির্বাচন করেছি এবং তারপরে এটি ফেলে রেখেছি। একটি নতুন ডাটাবেস তৈরি। আপনার নতুন ডাটাবেস-> আমদানি-> আপনার পূর্বে ডাউনলোড করা ফাইলটি নির্বাচন করুন> আমদানি ক্লিক করুন Select এখন আমার কাছে আমার পুরানো কাজের টেবিল রয়েছে এবং দূষিত টেবিলটি মুছে ফেলা হয়েছে। এখন আমি কেবল সারণী তৈরি করেছি যা ত্রুটি ছুঁড়েছিল।

সম্ভবত আমার কাছে দুর্গন্ধযুক্ত টেবিলটির আগের ব্যাকআপ ছিল।


2

এই ত্রুটিটি ঘটে যখন আপনি কিছু ফাংশন স্থগিত করেন। ভুল বিদেশী কী দিয়ে নীচে ক্যোয়ারী চালানো পছন্দ করুন।

set foreign_key_checks=0

2

ঠিক একই সমস্যা ছিল; আমি যুক্ত করলাম mysql@5.6(আগে 5.5 থাকার পরে)।

5.6 এর জন্য মদ তৈরির খেলাপি innodb_file_per_table=1যেখানে 5.5-এ রয়েছে innodb_file_per_table=0

আপনার বিদ্যমান ibdata1ফাইলটি (সম্মিলিত ইনডোডাব ডেটা) এরপরে আপনি যে টেবিলগুলি তৈরি / ড্রপ করার চেষ্টা করছেন তার উল্লেখ রয়েছে। হয় innodb_file_per_table0 এ ফিরে পরিবর্তন করুন , বা আইবডাটা 1 ডেটা ফাইল মুছুন ( এটি আপনাকে আপনার সমস্ত ডেটা হারাবে, সুতরাং এটি নিশ্চিত করুন যে আপনি এটির আগে ম্যাস্কাল্ড্প করেন বা ইতিমধ্যে একটি এসএসএল ডাম্প রয়েছে )।

অন্য ব্রিফের mysql@5.6ডিফল্ট আমাকে বিট দেয় যে বন্দরটির অভাব ছিল, সুতরাং ইউনিক্স সকেটে নেটওয়ার্কিং ডিফল্ট ছিল, এবং মাইএসকিএল ক্লায়েন্ট রিপোর্ট করে চলেছে:

ERROR 2013 (HY000): Lost connection to MySQL server at 'sending authentication information', system error: 32

আমি যোগ <string>--port=3306</string>করতে .plistঅ্যারে, কিন্তু আপনি উল্লেখ করতে পারে port=3306আপনারmy.cnf

brew services stop mysql@5.6তারপরে আপনার পরিবর্তনগুলি চালানbrew services start mysql@5.6


1

টেবিল স্পেস ফেলে দেওয়ার চেষ্টা আপনাকে অন্য ত্রুটি দিতে পারে। আমার জন্য, আমি নিম্নলিখিত ত্রুটি পেয়েছি:

DROP TABLESPACE `tablename`

Error Code: 1478. Table storage engine 'InnoDB' does not support the create option 'TABLESPACE or LOGFILE GROUP' 

আমার সমাধানটি ছিল ডাটাবেসটি ফেলে দেওয়া। এটি এর সাথে সম্পর্কিত যে কোনও টেবিল স্পেসগুলি সরিয়ে ফেলবে এবং আপনাকে আবার টেবিলগুলি তৈরি করতে দেয়।


19
দুর্ভাগ্যক্রমে এটি বলার মতো 'আমার একটি স্ক্রু আছে, এবং হাতুড়ি ব্যবহার করে এই ত্রুটি ফিরে আসে, সুতরাং আমার সমাধানটি এটিতে একটি বোল্ডার ফেলে দেওয়া ছিল'। আসল মানটি পুরো ডাটাবেসটিকে অকারণে কীভাবে এই টেবিলটি ঠিক করতে হবে তা নির্ধারণ করা হবে।
জেসন

ডোহ! আমি আশা করছিলাম এটি আমার প্রশ্নের বিকল্প সমাধান হবে (এবং আমি এটি উত্তর হিসাবে পোস্ট করেছি) তবে আমি ইতিমধ্যে টেবিলগুলির নামকরণ / ডাটাবেস বাদ দেওয়ার প্রক্রিয়াটি অর্ধেক পেরিয়েছি। আমি এখন InnoDB ঘৃণা করি।
নোবেলপ্লিট

তবে আমি ডাটাবেসটি নুক করে দিয়েছি, এটি পুনরায় তৈরি করেছি এবং এখনও এই সমস্যাটি রয়েছে!
ট্রিগ

@ টিআরআইজি আপনি সার্ভারটি পুনরায় চালু করেছেন?
এরিস

1
আমি মনে করি আমি একটি পৃথক প্রশ্ন করব, @ আরিস। আমার ক্ষেত্রে এটি একটি উবুন্টু ডেস্কটপে রয়েছে। আমি কেবলমাত্র মাইএসকিউএল নয়, পুরো মেশিনটি কয়েকবার পুনরায় চালু করেছি। একটি দিয়ে হাতে ডাটাবেস ফোল্ডার মুছে ফেলা হয়েছে rm -r। এটি বিরক্তিকর, কিন্তু শোস্টোপিং নয়।
TRIG

1

একই টেবিলের ভাল সংস্করণ সহ আপনার যদি অন্য কোনও সার্ভার থাকে তবে আপনি একটি অনুলিপি (টেবিল_কপি) তৈরি করতে পারেন, টেবিল_কপিটি সমস্যার সার্ভারে স্থানান্তর করুন। তারপরে সমস্যা সারণীটি মুছুন এবং টেবিলের টেবিল_কপিটির নামকরণ করুন।


1

আমার জন্য এটি কেবলমাত্র / var / lib / mysql / {db_name} (লিনাক্স) এর অধীনে এমওয়াইএসকিউএল ডেটা ডিরেক্টরিতে যেতে এবং {টেবিল_নাম } .ibd ফাইলটি ফোল্ডারের নামের মতোই ড্রপ করতে সহায়তা করেছিল।


0

আমি কেবল আমার লোকালহোস্টে অবস্থিত আমার পুরাতন ডিবিটিকে সরাসরি মোড় থেকে মুছে ফেলি, সমস্ত পরিষেবা বন্ধ করুন, wamp / bin / mysql / mysql [version] / ডেটাতে যান এবং DB সমস্যাযুক্ত পেয়েছি, আমি এটি মুছে ফেলি এবং আবার সমস্ত পরিষেবা মোড়ানো শুরু করি, আবার আপনার ডাটাবেস তৈরি করুন এবং এটি হয়ে গেছে, এখন আপনি আপনার টেবিলগুলি আমদানি করতে পারেন,


0

এই সমস্যাটি "সমাধান" করার জন্য আমি যেভাবে খুঁজে পেয়েছি তা মোটামুটি বিরক্তিকর, তবে একটি স্ক্রিপ্ট রয়েছে যা এটি পরিচালনা করে।

মূলত, আপনার যেতে হবে ibdata1এবং ib_logfile*ফাইলগুলি দূরে যেতে হবে (এগুলিতে অন্যান্য জিনিসের মধ্যে বিদেশী কীগুলির ম্যাপিং রয়েছে)। এটি করার একমাত্র নিরাপদ উপায় হল আপনার সমস্ত ডাটাবেস রফতানি করা, মাইএসকিএল বন্ধ করা, ফাইলগুলি সরিয়ে ফেলা, মাইএসকিএল শুরু করা এবং তারপরে ফাইলগুলি আমদানি করা।

স্ক্রিপ্ট এই সমস্যার সমাধান সাহায্য করে https://github.com/uberhacker/shrink-ibdata1 , এমনকি এই স্ক্রিপ্টের বিবৃত উদ্দেশ্যে ভিন্ন যদিও, এটা করে সমস্যা সমাধানের জন্য।


0

এটি আমার জন্য একমাত্র উপায় ছিল:

  1. একটি অনুরূপ টেবিল তৈরি করুন
  2. নতুন অনুরূপ টেবিলের .frm এবং .idb ফাইলগুলি দুর্নীতিগ্রস্থ টেবিলের নামে অনুলিপি করুন।
  3. ফিক্স অনুমতি
  4. মারিয়াডিবি পুনরায় চালু করুন
  5. দূষিত টেবিলটি ফেলে দিন

-1

যদি আপনার এই সমস্যা থাকে এবং আপনার কাছে অন্য কোনও বিকল্প নেই তবে ইঞ্জিনটি 'মাইসাম' এর মতো অন্য কোনও ইঞ্জিনে পরিবর্তন করুন, তারপরে সারণীটি তৈরি করার চেষ্টা করুন।

অস্বীকৃতি: এটি বৈধ উত্তর নয় কারণ আপনার কাছে বৈদেশিক কী বাধা থাকতে পারে যা অন্য স্টোরেজ ইঞ্জিন দ্বারা সমর্থিত হবে না। প্রতিটি স্টোরেজ ইঞ্জিনের ডেটা সংরক্ষণ এবং অ্যাক্সেস করার নিজস্ব বৈশিষ্ট্য রয়েছে, এই পয়েন্টগুলিও বিবেচনায় নেওয়া উচিত।


-1

ইমপোর্টের আগে টেবিল স্পেসটি ডিস্কার্ড করুন

আমি একই সমস্যার সমাধান নীচে পেয়েছি

  1. প্রথমে আপনাকে আপনার ডাটাবেসের নাম বাদ দিতে হবে। যদি আপনার ডাটাবেস মুছে না যায় তবে আপনি আমাকে প্রবাহিত করবেন। উইন্ডোজ সিস্টেমের জন্য আপনার ডিরেক্টরি সি হবে: / এক্সএএমপিএপি / মাইএসকিএল / ডেটা / আপনার ডাটাবেস ফোল্ডারটি "আপনার ডেটাফোল্ডার" সরান

  2. আবার আপনাকে নতুন ডাটাবেস তৈরি করতে হবে এবং আপনার পুরাতন এসকিএল ফাইলটি আমদানি করতে হবে। এটা কাজ হবে

ধন্যবাদ


-1

আমাকে আমার মাইএসকিউএল ডেটা ডিরেক্টরিটি সনাক্ত করতে হয়েছিল:

ভেরিয়েবলগুলি যেখানে দেখান ভেরিয়েবল_নাম "% দির" পছন্দ করুন

তারপরে সেই ডাটাবেসটি সরিয়ে দিতে বাধ্য করুন:

sudo rm -rf


-1

আপনি নিম্নলিখিত কোয়েরিটি মাইএসকিএল রুট ব্যবহারকারী হিসাবে চালাতে পারেন

drop tablespace `tableName`

-1

আরে বিকাশকারীরা আপনার সময় নষ্ট করবেন না। কেবল টেবিলযুক্ত ডাটাবেস মুছুন এবং আবার পুরো টেবিলগুলি আমদানি করুন। সময় বাঁচান = সময় অর্থ। চিয়ার্স।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.