بایگانی برچسب: s

تغییر نام database بر روی mariadb

شاید برای شما هم پیش بیاد که بخواین که نام دیتابیس را تغییر بدید. خوب اگه از phpmyadmin استفاده می‌کنید که اون خودش براتون این کار را می کنه. ولی اگه خودتون می خواید از طریق خط فرمان این کار را انجام بدید، باید بدونید که دستوری برای این کار نداریم!

پس برای انجام این کار باید چی کار کرد. یک راه حل اولیه اینه که یک دیتابیس جدید با اسم مورد نظر بسازید، از دیتا بیس قبلی backup بگیرید و بعد در دیتابیس جدید restore کنید.

mysqldump -u username -p -v olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql

اگه بخوایم یه کم بار I/O را کم کنیم می تونیم از ترفند زیر استفاده کنیم (من از stackoverflow پیدا کردم)

mysqladmin -u username -p create newdatabase
mysqldump -u username -v olddatabase -p | mysql -u username -p -D newdatabase

اگه از Innodb برای دیتابیس استفاده می‌کنید، یه روش کم بار تر هم می تونید استفاده کنید. دیتابیس جدید با اسم جدید بسازید و بعد table هاتون را rename کنید.

RENAME TABLE old_db.table TO new_db.table;

برای اینکه همه table ها را یکجا rename کنید از حلقه while یا for می تونید استفاده کنید

mysql -u username -ppassword old_db -sNe ‘show tables’ | while read table; \
do mysql -u username -ppassword -sNe “rename table old_db.$table to new_db.$table”; done

 

برگرداندن بک آپ یک ستون از دیتابیس

امروز یه حادثه کوچیک رخ داد. به اشتباه یک ستون از یک table پاک شد. این موضوع اگه یک backup‌ مطمئن نداشته باشی یک فاجعه است و احتمالا درد سر های زیادی خواهید داشت.

اما اگه بک آپ داشته باشی خیلی راحت می تونید از فایل  backup ستونی که می خواهید را اصلاح کنید.

مشکل پیش رو اینه که نمی تونیم مستقیم از بک آپ کل دیتابیس یک سطر از table را برگرداند. خوب اما راه حل:

۱- بر گرداندن بک آپ روی یک دیتا بیس با اسم متفرقه

mysql -u root -p

>create database backup;

mysql -u root -p backup < site-backup.sql

۲- جایگزین کردن ستون از روی ستون دیتابیس backup

mysql -u root -p

> update maindb.tablename, backupdb.tablename set maindb.tablename.corrupt_column = backupdb.tablename.corrupt_column where maindb.tablename.id = backupdb.tablename.id;;

با دستور آخر ستون corrupt_column از جدول tablename از دیتابیس backupdb بر روی ستون corrupt_column از جدول tablename از جدول maindb به صورت سطر به سطر با شرط اینکه سطر ها دارای id یکسان باشند کپی می شود.