vous pouvez renommer la base de données à l'aide de la commande suivante, mais assurez-vous d'abord d'effectuer une sauvegarde
CREATE database new_db_name;
RENAME TABLE db_name.table1 TO new_db_name, db_name.table2 TO new_db_name;
DROP database db_name;
références :http://www.rndblog.com/how-to-rename-a-database-in-mysql/https://stackoverflow.com/questions/12190000/rename-mysql-database
Vous pouvez le retirer en utilisant mysqldump. Voici le hic :vous ne pouvez pas expédier les données car il peut y avoir un coût associé à l'expédition des données.
Pour cet exemple, disons que vous voulez renommer mydb
à ourdb
ÉTAPE 01 :Créer la nouvelle base de données
mysql> CREATE DATABASE ourdb;
ÉTAPE 02 :Obtenir le schéma sans les déclencheurs
mysqldump -hrdshost -uuser -ppassword -d -t -R --skip-triggers mydb > /tmp/schema.sql
ÉTAPE 03 :Obtenir les déclencheurs
mysqldump -hrdshost -uuser -ppassword --skip-routines --triggers mydb > /tmp/triggers.sql
ÉTAPE 04 :Générer le script pour faire INSERT ... SELECT
sur tous les tableaux
S'IL EXISTE DES CONTRAINTES DE CLÉ ÉTRANGÈRE
ETL_DATA_SCRIPT=/tmp/DataTransfer.sql
echo -n > ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@CHARACTER_SET_CLIENT;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@CHARACTER_SET_RESULTS;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@COLLATION_CONNECTION;" >> ${ETL_DATA_SCRIPT}
echo "SET NAMES utf8;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@TIME_ZONE;" >> ${ETL_DATA_SCRIPT}
echo "SET TIME_ZONE='+00:00';" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@SQL_NOTES, SQL_NOTES=0;" >> ${ETL_DATA_SCRIPT}
echo "SET group_concat_max_len = 104857600;" >> ${ETL_DATA_SCRIPT}
SQL="SELECT CONCAT('INSERT INTO ourdb.',table_name,' SELECt * FROM mydb.',table_name,';')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='mydb'"
mysql -hrdshost -uuser -ppassword -ANe"${SQL}" >> ${ETL_DATA_SCRIPT}
S'IL N'Y A AUCUNE CONTRAINTE DE CLÉ ÉTRANGÈRE
ETL_DATA_SCRIPT=/tmp/DataTransfer.sql
SQL="SELECT CONCAT('ALTER TABLE mydb.',table_name,' RENAME ourdb.',table_name,';')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='mydb'"
mysql -hrdshost -uuser -ppassword -ANe"${SQL}" > ${ETL_DATA_SCRIPT}
S'il n'y a pas de contraintes de clé étrangère, cela devrait aller vite.
ÉTAPE 05 :Combinez les fichiers en un seul script
ETL_SCRIPT=/tmp/ETL.sql
cat /tmp/schema.sql > ${ETL_SCRIPT}
cat /tmp/DataTransfer.sql >> ${ETL_SCRIPT}
cat /tmp/triggers.sql >> ${ETL_SCRIPT}
ÉTAPE 06 :Révisez le script
vi -R /tmp/ETL.sql
ou
less /tmp/ETL.sql
ÉTAPE 07 :Exécuter le script
mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}
ÉTAPE 08 :Assurez-vous que toutes les données sont dans la base de données cible
Vous pouvez le faire
S'il n'y avait pas de contraintes de clé étrangère, mydb devrait être vide et ourdb devrait avoir toutes les tables.
S'il y avait des contraintes de clé étrangère, assurez-vous que mydb
et ourdb
ont le même nombre de tables et le même nombre de lignes. Assurez-vous que tous les déclencheurs sont présents en exécutant
SELECT COUNT(1) trigger_count,table_schema
FROM information_schema.triggers
GROUP By table_schema;
ÉTAPE 09 :Supprimez manuellement l'ancienne base de données
mysql> DROP DATABASE mydb;
Je n'ai pas inclus la suppression de la base de données dans le script, juste au cas où. :-)