我想将热表的内容复制到同一数据库上的另一个表。我不想重命名原件或将其删除。使用备份复制MySQL表
一个选项是创建一个新表,如同当前的一个,然后INSERT INTO ... SELECT。
但是,我认为使用mysqlhotcopy创建我的表的备份可能是最快的,然后将其加载到第二个表中。我不知道我该如何完成第二部分 - 从备份加载到任意表Foo中。我想用PHP来做到这一点。
任何想法?
我想将热表的内容复制到同一数据库上的另一个表。我不想重命名原件或将其删除。使用备份复制MySQL表
一个选项是创建一个新表,如同当前的一个,然后INSERT INTO ... SELECT。
但是,我认为使用mysqlhotcopy创建我的表的备份可能是最快的,然后将其加载到第二个表中。我不知道我该如何完成第二部分 - 从备份加载到任意表Foo中。我想用PHP来做到这一点。
任何想法?
这是一个概述:
你的答案真的取决于你能有多大你的表是和读了多少,锁定时间站立。 A 批号的记录可以在2秒内复制。
不管你用哪种方式切割它,你在阅读时都需要在表上进行某种读取锁定(无论如何都要获得一致的读取)。 InnoDB事务可能提供一种获得一致快照而不阻碍其他编写者的方式。 MyISAM或InnoDB将有非常不同的备份策略。
于MyISAM
一个非常快速的方式做你指的是什么:
CREATE TABLE x_backup LIKE x;
ALTER TABLE x_backup DISABLE KEYS;
INSERT INTO x_backup SELECT * from x;
ALTER TABLE x_backup ENABLE KEYS;
一个真实的例子:
8.68秒为333935个体面大小的记录。
Name: sds_profile
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 333935
Avg_row_length: 129
Data_length: 43114720
Index_length: 11572224
mysql> create table x LIKE sds_profile;
Query OK, 0 rows affected (0.01 sec)
mysql> alter table x disable keys;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into x select * from sds_profile;
Query OK, 333935 rows affected (8.68 sec)
Records: 333935 Duplicates: 0 Warnings: 0
mysql> alter table x enable keys;
Query OK, 0 rows affected (0.78 sec)
随着InnoDB的
考虑做类似,但与正确的隔离级别的事务。
hotcopy但
如果是从PHP这样做,这将有利于通过正常的MySQL认证机制来做到这一点。否则,您需要直接访问数据目录,并在mysql文件中读取权限。这可能会引发更多的安全问题,您可能不想与之抗衡。
我打算建议使用php myadmin并单击操作选项卡。那里有一个表格复制程序。如果这将是一个持续的事情,创建一个新表格并插入内容应该这样做。
我会用SELECT...INTO OUTFILE
和LOAD DATA INFILE
来实现这一点。
你有很大的灵活性,它会执行得更快。