DELIMITER $$
USE `bjcmdb`$$
DROP PROCEDURE IF EXISTS `pro_database_backup`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pro_database_backup`(IN databaseName CHAR(40))
BEGIN
##Define variables
DECLARE tableName VARCHAR(40 );
DECLARE oldtableName VARCHAR(40);
DECLARE newtableName VARCHAR(40);
DECLARE cur_stop INT DEFAULT 0;
##First define the cursor here
DECLARE cur_tableName CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'bjcmdb' AND TABLE_NAME NOT IN ('c_basisline');
##This is a conditional processing, for the condition of SQLSTATE '02000'
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET cur_stop = NULL;
##Create database
SET @createDatabaseSql :=CONCAT("create database ",databaseName,";");
PREPARE STMT FROM @createDatabaseSql;
EXECUTE STMT;
##Format database name
SET databaseName=CONCAT(databaseName,".");
##Open the cursor
OPEN cur_tableName;
/*The cursor goes down one step and pays the queried value to the defined variable*/
FETCH cur_tableName INTO tableName;
##End traversal
WHILE until the query result is empty ( cur_stop IS NOT NULL) DO
##Assign table name
SET oldtableName=CONCAT('bjcmdb.',tableName);
SET newtableName=CONCAT(databaseName,tableName);
##Create table, including table structure and index
SET @createsql :=CONCAT("CREATE TABLE ", newtableName," LIKE ", oldtableName,";");
PREPARE STMT FROM @createsql;
EXECUTE STMT;
##复制数据到指定库的表
SET @insertsql :=CONCAT("INSERT INTO ",newtableName," SELECT * FROM ",oldtableName,";");
##SELECT @insertsql;
PREPARE STMT FROM @insertsql;
EXECUTE STMT;
FETCH cur_tableName INTO tableName;
END WHILE;
CLOSE cur_tableName;
END$$
DELIMITER ;
mysql stored procedure --- database replication
Guess you like
Origin http://10.200.1.11:23101/article/api/json?id=327041090&siteId=291194637
Recommended
Ranking