How to recover data from mysql table? - mysql

I accidentally deleted all data from my SQL table. How to recover it?
The table still exists, only the contents in the DB have been lost.
I was trying to delete "id" COLUMN from the table, but unfortunately all the content got deleted. I used this command delete from covers where "id".
How to recover the data ?

MySql Data Recovery
Install the same version of mysql.
Remove mysql directory from data directory of the server and copy it from the crashed server. This is the key element
copy directory of database you want to recover into data directory of new server
start mysql.
switch to mysql database: USE mysql; and run REPAIR TABLE <table name> on every table.
Do the same with database you want to recover
tip: make sure the 2 directories have the same permissions like data directory
If you did not save mysql database (mysql directory in your old server's data dir, then you can try to:
create database with the same name as database you want to recover.
Then you can create each table (it would be good to use the same structure - you'd have bigger chance of recovery).
then stop mysql server and delete files from database directory and overwrite them with files from old server
start mysql and repair each table.

Related

How do I locate my new mySQL database where I want it?

I'm on Windows using mySQL Workbench when I absolutely have to, otherwise ADO.
I'm experienced with Jet databases where you just create your mdb file, put it wherever you want whenever you want, and open the database with an ADO connection string containing the path to the database.
Now I've got to do this wretched mySQL thing ... for some reason I don't understand there's this Data directory where all the databases go and you can't change that when creating the database(?).
So I create my database as a shell (1 junk table to be deleted later, no records) and it's stuck in this worthless Data directory. Now I want to copy/paste this shell to where I really want it, and start working on it through ADO to create my "real" database ... but it doesn't work; my ADO connection string contains the new path and the connection opens with no errors, but all operations only change the copy in the Data directory.
Yes I have searched this topic, and the only "solutions" I see are to change the default Data directory in the ini file ... this seems silly and unworkable; what if I want to create another database and put it somewhere else?
Can someone please shed some light here?
Once you connect to the MySQL database as a user that can create databases, usually the root user after install, you can just write:
CREATE DATABASE my_database;
and that database will be created on the machine that's running the MySQL server process in the datadir that MySQL is using. There are default locations for these things, but you probably won't need to worry about them. You don't need to worry about where the files end up going as the first commenter says.
Here is the information for finding your my.cnf file on Windows. Once you find that file, update your datadir to the location that you want like this:
datadir="C:\New Data\Path"
and then stop your MySQL server and move your files. Restart the MySQL server after you copy all of the files in your current datadir to it. You can find your current datadir with the following command (connected to the server as the root user):
SHOW VARIABLES LIKE '%datadir%';
Make sure to stop the server before moving your files.
The CREATE TABLE documentation shows that you can create a table in a TABLESPACE that's outside of your datadir. First create a tablespace like the following:
CREATE TABLESPACE my_tablespace ADD DATAFILE 'C:\my_space';
which needs to be a single file if you want to use the InnoDB engine. You can then create tables in that table space by specifying it in your table's creation like:
CREATE TABLE new_table (a INT) TABLESPACE my_tablespace;
I haven't done this before, but it should work.

I Want to use a mysql database from a backup of a non-working server on a new computer

My database is from a backup of the non-working server.
My database is the teachercenter folder that was on the server, and contains files for each table name with the extension *.frm.
I copied the database from:
C:\Users\xxx\Downloads\wamp-saved\wamp\bin\mysql\mysql5.1.36\data\
And pasted that folder on my computer here:
C:\wamp\bin\mysql\mysql5.6.17\data
I realize the the two mysql's were different versions, but I'm just trying to use the database files.
When I start up PHPMyAdmin on the new computer, it shows the teachercenter database in the list of databases.
Also, if I click the plus next to the teachercenter database, I can see a list of my database tables!
But if I click on teachercenter database itself, I get error:
No tables found in database.
How do I get mysql to recognize and let me operate (PHPMyAdmin) on the teachercenter database on the new computer?
I tried to start/use wampmanager.exe, but I don't see it running to use it's menus.
THE PROBLEM IS SOLVED:
At: stackoverflow.com/questions/10934745/… a simple answer to my probelem is given, as follows: "Yes this is possible. It is not enough you just copy the .frm files to the to the database folder but you also need to copy the ib_logfiles and ibdata file into your data folder." I copied the ib_logfiles and ibdata file into my data folder, and Voila! PHPMyAdmin was completely happy with the database and its tables and I could do SQL exports of table records.
Summary: To make use of a MySQL database of *.frm files that your MySQL doesn't understand, simply copy the ib_logfiles and ibdata file from whereever you got the .frm files from, and put these two files in the data folder next to the database you want to use. Once you do that, the MySQL database engine will recognize your database, and you can all PHPMyAdmin operations on your fully operational database.
Because you can't be sure that the MyISAM storage format backwards compatible, your safest option is to install MySql 5.1.36, use mysqldump to export your entire database to plain SQL, install MySql 5.6.17 and then import your data using SQL.
Also, this probably gives better results because your indexes are rebuild.

Imported data are missing in Mysql

I had copyed the data folder under wamp/bin/mysql/mysql(v)/data befor formate my computer, then after installing new os and then wamp I replace the data folder.
Now when I opening phpmyadmin the list of databases are showing but under the data base the tables are not shownig.
When I am using the myadminer it shows the lisst of table but not the tables data.
when I am using sqlbuddy one warning is showing in the place of listing tables. warning is like
Warning: array_key_exists() expects parameter 2 to be array, boolean given in E:\wamp\apps\sqlbuddy1.3.3\dboverview.php on line 215
you should have taken a proper backups - using mysqldump. if you used innodb storage engin and it was configured to keep log files or tablespace files somewhere else - i'm afraid you've lost your data.
I'm sorry, you have lost your data. In the future create backups frequently and create MySQL dump whenever you want to migrate your database.

MySQL Phantom tables

I did a drop query on a MySQL table... my GUI interface crashed right in the middle of the process. The table does not exist in the listing; however, when I go to make a new one it says that there is already a table with that name. I tried doing a DROP TABLE and a RENAME on this phantom table but both queries run endlessly.
FYI I am unable to restart MySQL because shit might break on our live sites.
Any help is greatly appreciated.
Try repairing the table :
http://dev.mysql.com/doc/refman/5.1/en/repair-table.html
The tablename matches three files in the filesystem with a .frm, .myd and .myi extension (for the table definition, data and index files respectively) One of these files is corrupted, which prevents MySQL from carrying out your order.
Option 1 delete files from the filesystem
Have a look at the filesystem to see which file still exists.
If the .frm file is missing, you should be able to delete the other two files.
If the .frm file is still there do not delete, MySQL still has a lock on that file.
Option 2 repair the database
Use the myisamchk to diagnose and repair your database.
See: http://forge.mysql.com/wiki/MySQL_Internals_File_Formats
And: http://dev.mysql.com/doc/refman/5.0/en/myisam-repair.html
Check the directory where mysql stores the databases. On Ubuntu it's in /var/lib/mysql, but it may be different depending on your OS and configuration. Inside that directory there is a directory for every database, go into the directory for the problematic database, and delete any file that are the table name with extensions .frm, .myd, and .myi.
Sounds like you have a disconnect between what you have and what your server thinks you have.
You'll need SSH access and have to repair the table manually.
Log in to SSH and type:
mysql -u root -p
And enter your root mysql password.
Then
show databases
And it will list all the databases on your server.
Select the database you want with
use databasename;
Then
show tables;
This should list every table in your database. It's likely that it's still shows up there, so do a
drop tablename;
Hopefully that will correct your issue.
Ended up restoring from a backup... editing files in the file system is scary and may have required a restart.

How can I recover MySQL tables from data files?

I've got a database (all MyISAM tables) and the machine where MySQL was running is no longer bootable. However, we have all the MySQL data files from the data directory. How can I restore the data from the MYD and FRM files, or whatever other files I should be looking at in the data directory?
I've been doing some searching on this and it sounds like for MyISAM I should just be able to copy the database subdirectory from the old MySQL data directory to the new MySQL data directory. However, that's not working for me. A database with the name of the database I'm trying to recover shows up in the list of databases in phpMyAdmin, but all the tables show "in use" and have no information (e.g., number of rows, number of bytes, column information, etc.). Any operation on those tables (e.g., SELECT * FROM {table}, REPAIR {table}, CHECK {table}) returns a "no such table" error.
One of the tools I ran across in my search is DBACentral by MicroOLAP. It's got component that's supposed to restore data from FRM/MYD files, but when I tried to run it, it didn't list any tables that it could recover from my FRM/MYD files.
This is on a developer workstation that's running Vista Business 32bit. MySQL version is 5.0.27. After fixing the machine, I went and got the exact same version of MySQL (v5.0.27), thinking that if I'm just going to drop in the binary data files I should do it with the same version of MySQL. It still didn't work.
Any insights would be greatly appreciated... thanks!
-Josh
Install the same version of mysql.
Remove mysql directory from data directory of the server and copy it from the crashed server. This is the key element
copy directory of database you want to recover into data directory of new server
start mysql.
switch to mysql database: USE mysql; and run REPAIR TABLE <table name> on every table.
Do the same with database you want to recover
tip: make sure the 2 directories have the same permissions like data directory
If you did not save mysql database (mysql directory in your old server's data dir, then you can try to:
create database with the same name as database you want to recover.
Then you can create each table (it would be good to use the same structure - you'd have bigger chance of recovery).
then stop mysql server and delete files from database directory and overwrite them with files from old server
start mysql and repair each table.
I wound up giving up. I think the answer is that, with my particular version of MySQL, this doesn't work. Hopefully things have improved since then.