新近有次在修改某段程式時,發現一段程式算法看起來簡單。

数据库崩溃恢复生机表结构的秘诀

假设数据库产生崩溃,不恐怕登入数据库,想要急速回复表结构的话有三个很有益于的形式。
通过mysqlfrm工具就足以便捷分析.frm文件,找到create table 语句。

-- 查询邮件发送记录和报告
SELECT TOP(50) * FROM msdb.dbo.sysmail_allitems ORDER BY mailitem_id DESC
SELECT TOP(50) * FROM msdb.dbo.sysmail_event_log ORDER BY log_id DESC

-- 删除指定时间之前的邮件发送记录和报告
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp @sent_before = '2018-03-01 00:00';
GO
EXECUTE msdb.dbo.sysmail_delete_log_sp @logged_before = '2018-03-01 00:00';
GO

但背後因為多次查詢數據庫,導致效率問題。

安装mysqlfrm

安装mysqlfrm的话,供给七个安装包。mysql-utilities和mysql-connector-python。

能够去官方网站里找到相应操作系统版本的rpm安装包。 mysql-utilities,mysql-connector-python.

这里演示centos7版本的安装格局:

wget 

wget 

rpm -ivh mysql-connector-python-2.1.6-1.el7.x86_64.rpm

rpm -ivh mysql-utilities-1.6.5-1.el7.noarch.rpm

which mysqlfrm 
/usr/bin/mysqlfrm

mysqlfrm已经设置收尾。

  

這段程式主借使使用 EPPLUS 讀取 Excel
資料,檢查資料是还是不是已存在數據庫中,若有就將已存在的序號回傳

光复表结构

相当粗略,一条命令解决。

1、步入到想要苏醒的表的目录里面。 
cd /data/mysql/mysql3306/data/mysql 
2、钦点user,basedir,port(找二个尚未用的端口) 
mysqlfrm –user=mysql –basedir=/usr/local/mysql mysql:user.frm
–port=3333

CREATE TABLE mysql.user ( Host char(60) COLLATE utf8_bin NOT NULL
DEFAULT ”, User char(32) COLLATE utf8_bin NOT NULL DEFAULT
”,Select_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’, Insert_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’,Update_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’, Delete_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’,Create_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’, Drop_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’,Reload_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’, Shutdown_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’,Process_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’, File_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’,Grant_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’, References_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’,Index_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’, Alter_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’,Show_db_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’, Super_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’,Create_tmp_table_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL
DEFAULT ‘N’, Lock_tables_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT
NULL DEFAULT ‘N’, Execute_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT
NULL DEFAULT ‘N’, Repl_slave_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT
NULL DEFAULT ‘N’, Repl_client_priv enum(‘N’,’Y’) CHARACTER SET utf8
NOT NULL DEFAULT ‘N’, Create_view_priv enum(‘N’,’Y’) CHARACTER SET
utf8 NOT NULL DEFAULT ‘N’, Show_view_priv enum(‘N’,’Y’) CHARACTER SET
utf8 NOT NULL DEFAULT ‘N’, Create_routine_priv enum(‘N’,’Y’) CHARACTER
SET utf8 NOT NULL DEFAULT ‘N’, Alter_routine_priv enum(‘N’,’Y’)
CHARACTER SET utf8 NOT NULL DEFAULT
‘N’, Create_user_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL
DEFAULT ‘N’, Event_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL
DEFAULT ‘N’, Trigger_priv enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL
DEFAULT ‘N’, Create_tablespace_priv enum(‘N’,’Y’) CHARACTER SET utf8
NOT NULL DEFAULT ‘N’, ssl_type enum(”,’ANY’,’X509′,’SPECIFIED’)
CHARACTER SET utf8 NOT NULL DEFAULT ”, ssl_cipher blob NOT
NULL, x509_issuer blob NOT NULL, x509_subject blob NOT
NULL, max_questionsint(11) unsigned NOT NULL DEFAULT
‘0’, max_updates int(11) unsigned NOT NULL DEFAULT
‘0’, max_connections int(11) unsigned NOT NULL DEFAULT
‘0’,max_user_connections int(11) unsigned NOT NULL DEFAULT
‘0’, plugin char(64) COLLATE utf8_bin NOT NULL DEFAULT
‘mysql_native_password’,authentication_string text COLLATE
utf8_bin, password_expired enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL
DEFAULT ‘N’, password_last_changedtimestamp NULL DEFAULT
NULL, password_lifetime smallint(5) unsigned DEFAULT
NULL, account_locked enum(‘N’,’Y’) CHARACTER SET utf8 NOT NULL DEFAULT
‘N’, PRIMARY KEY (Host,User) ) ENGINE=MyISAM DEFAULT CHARSET=utf8
COLLATE=utf8_bin COMMENT=’Users and global privileges’

…done.

参考:

優化前的案例原碼如下

发表评论

电子邮件地址不会被公开。 必填项已用*标注