MySQL 快速複製 Table 的方法

标签: My_Note-Unix copy mysql table | 发表时间:2013-08-30 01:23 | 作者:Tsung
出处:http://blog.longwin.com.tw

MySQL 要複製 整個 Table, 要怎麼做呢?

MySQL 快速複製 Table 的方法

以下範例都是把 old_table 複製到 new_table.

先講講結論, 最推薦的作法是下述兩行:

  • CREATE TABLE new_table LIKE old_table;
  • INSERT new_table SELECT * FROM old_table;

以下來講講幾種作法 和 優缺點.

MyISAM 的作法若比較暴力點的話, 可以用下述方式做:

  1. CREATE TABLE new_table;
  2. /etc/init.d/mysql stop
  3. cd /var/lib/mysql/database_name
  4. cp old_table.MYI new_table.MYI
  5. cp old_table.MYD new_table.MYD
  6. /etc/init.d/mysql start

這樣子也可以複製完成, 但是這麼暴力有可能會有些小問題要解決.

下述作法會比較建議(參考自此篇: sql - fastest way to copy a table in mysql), 不過有下述兩種作法, 有些不同, 先寫出作法, 再來解釋差異.

註: 以下 old_table 若跨 DB, 都可以寫成 old_db.old_table 來指定.

第一種作法: 一行語法複製 Table + Data, 不過需要手動增加 Primay、index key 等.

  1. CREATE TABLE new_table SELECT * FROM old_table; # 這個作法 Primay、index key 都不會複製, 需要手動加
  2. ALTER TABLE new_table ADD PRIMARY KEY (id);

第二種作法: 先複製 Table schema, 再來 INSERT Data. (建議使用此作法, Schema 一定是一模一樣的)

  1. CREATE TABLE new_table LIKE old_table;
  2. INSERT new_table SELECT * FROM old_table;

先來講講第一種作法: (此作法 Schema 可能不同, Data 是會正確複製過來的)

  • CREATE TABLE new_table SELECT * FROM old_table;
  • 此行會把 Table 和 Data 都複製到 new_table, 但是 Table 使用的 Engine、語系編碼 會跟 MySQL 預設的一樣, 而不是 Copy old_table 的. 結果可能就會是下述的狀況: (要看你的系統設定而定, old_table 和 new_table 的 schema 可能會不同, 但是 Data 是一致的)
  • CREATE TABLE `old_table` (
    `no` int(8) NOT NULL,
    `cname` varchar(255) DEFAULT NULL,
    PRIMARY KEY (`no`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

  • CREATE TABLE `new_table` (
    `no` int(8) NOT NULL,
    `cname` varchar(255) CHARACTER SET utf8 DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

第二種作法: (此作法可以將 Schema 和 Data 都是一模一樣的複製過來)

  • CREATE TABLE new_table LIKE old_table;
  • 此行會完整複製 Table Schema, 先複製完 Table Schema 後, 再來把資料一筆一筆 INSERT 進去.

The post MySQL 快速複製 Table 的方法 appeared first on Tsung's Blog.

相关 [mysql table 方法] 推荐:

mysql的table is read only 解决方法

- - CSDN博客系统运维推荐文章
今天,在centos6下把mysql没法启动的数据库文件夹复制到/usr/local/mysql/var下,结果在修改表时,提示”table isreadonly”的错误. 首先想到的是遇到了权限问题,所以就去/usr/local/mysql/var查看了下,果然所有者不是mysql,权限也不正确.

MySQL 快速複製 Table 的方法

- - Tsung's Blog
MySQL 要複製 整個 Table, 要怎麼做呢?. MySQL 快速複製 Table 的方法. 以下範例都是把 old_table 複製到 new_table.. 先講講結論, 最推薦的作法是下述兩行:. 以下來講講幾種作法 和 優缺點.. MyISAM 的作法若比較暴力點的話, 可以用下述方式做:.

MySQL Temporary Table相关问题的探究

- comain - 淘宝核心系统团队博客
让我们先来观察几条非常简单的MySQL语句:. 这是丁奇提出的引导性的问题,几条语句看似简单,不过接下来我们提出的一连串问题与进. 看到以上语句,你很容易会产生类似于以下的疑问:. 上述语句在一个session中先后创建了两个名为’tmp’的table,只不过一个是temporary. table,一个是normal table.

MySQL 對 MyISAM、InnoDB 使用 Optimize Table

- - Tsung's Blog
系統用久了, 自然就會有不連續的碎片(fragmented)產生, 以前 Dos 使用 defrag, Windows 使用磁碟重組, 而 MySQL 則是使用 Optimize table.. 以往都是使用: 使用 PHP 對所有 MySQL Database 做 Optimize / Repair 的動作 - 這裡面的那隻程式來跑..

抓取 MySQL Table 的 auto_increment 最大值

- - Tsung's Blog
MySQL 使用 InnoDB 要做 SELECT COUNT(*) 會非常慢, 若是此 Table 符合下述狀況. 很少刪除 (或知道大概會刪多少資料). 有設定 auto_increment. 就可以考慮直接抓取 auto_increment 的值來當參考.. 抓取 MySQL Table auto_increment 的最大值.

mysql删除大表更快的drop table办法

- 胖岁 - haohtml's blog
曾经发文介绍过,DROP table XXX ,特别是碰到大表时,. 在DROP TABLE 过程中,所有操作都会被HANG住. 这是因为INNODB会维护一个全局独占锁(在table cache上面),直到DROP TABLE完成才释放. 在我们常用的ext3,ext4,ntfs文件系统,要删除一个大文件(几十G,甚至几百G)还是需要点时间的.

解决 MySQL 的 Table is marked as crashed and should be repaired 问题

- - vpsee.com
昨天一位 VPS 客户说他的 WordPress 博客没了,网站可以打开,但是文章都没了,怀疑被黑. 我们登陆客户 VPS 后没发现被黑迹象,然后进入 MySQL 数据库发现 Table ‘./wordpress/wp_posts’ is marked as crashed and should be repaired 错误,因为 wp_posts 表被损坏了,所以 WordPress 的文章都显示不出来:.

mysql优化方法

- - 数据库 - ITeye博客
通过show status和应用特点了解各种SQL的执行频率. 通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladmin extended-status命令获得. SHOW STATUS可以根据需要显示session级别的统计结果和global级别的统计结果. 以下几个参数对Myisam和Innodb存储引擎都计数:.

Table冻结表头

- - CSDN博客Web前端推荐文章
序号. 内容. 序号. 内容. 作者:zyuc_wangxw 发表于2013-8-20 17:32:14 原文链接. 阅读:36 评论:0 查看评论.

mysql碎片整理方法

- - 数据库 - ITeye博客
  对于一个表如果经常插入数据和删除数据,则会产生很多不连续的碎片,这样久而久之,这个表就会占用很大空间,但实际上表里面的记录数却很少,这样不但会浪费空间,并且查询速度也更慢,因此为了解决这个问题,可以有心下解决方案. 1、myisam存储引擎清理碎片方法. 2、innodb存储引擎清理碎片方法. 从上面的DATA_FREE字段可以看出碎片空间很大.