mysqlは表領域を介してデータを復元または転送する
11045 ワード
mysqlのバックアップツールには、通常mysqldump、mysqlpump(5.7以降の新しいプロパティ)などのバックアップツールがあります.ここでは、表領域を使用して転送してみましょう.
データファイルのコピー+表領域のコピー 対応innodbエンジンはibdファイルとcfgファイルです
この方式を実行するための要求
次に例を挙げて説明する
1一般的な表領域の転送
2つのmysql、ソース+ターゲットを用意し、同時にテーブル作成コマンドを行います.1つはソースmysqlと呼ばれ、1つはターゲットmysqlと呼ばれます.
ソースmysqlにデータを挿入する
ターゲットmysql上で表領域を解放する
ソースmysqlに.cfgメタデータファイルを作成します.現在のウィンドウを閉じないでください.そうしないと消えません.
データファイルのコピー+表領域のコピー 対応innodbエンジンはibdファイルとcfgファイルです
この方式を実行するための要求
(1) , innodb_file_per_table ;
(2) , ;
(3) data page size ;
(4) MySQL 5.7.4 ;
(5) , set foreign_key_check=0 , , ;
次に例を挙げて説明する
1一般的な表領域の転送
2つのmysql、ソース+ターゲットを用意し、同時にテーブル作成コマンドを行います.1つはソースmysqlと呼ばれ、1つはターゲットmysqlと呼ばれます.
create table first(id int,name char(16));
ソースmysqlにデータを挿入する
insert into first values(1,'ni'),(2,'wo'),(3,'ta');
ターゲットmysql上で表領域を解放する
alter table first discard tablespace; # first.ibd , first.frm
frm , :rename table,drop table , ibd , :dml
:
select * from first;
ERROR 1814 (HY000): Tablespace has been discarded for table 'first'
ソースmysqlに.cfgメタデータファイルを作成します.現在のウィンドウを閉じないでください.そうしないと消えません.
flush tables first for export; # , MySQL first.cfg ,
:
insert into first values(10,'hehe'); DML
ERROR 1099 (HY000): Table 'first' was locked with a READ lock and can't be updated
first.cfg first.ibd mysql
cp mysql /first.{cfg,ibd} mysql/
chown mysql.mysql *
mysql
UNLOCK TABLES;
mysql
alter table first import tablespace;
mysql
select * from first;
2 (mysql5.7.4 )
test_range_partition
database test_range_partition
mysql> CREATE TABLE test_range_partition(
-> id INT auto_increment,
-> createdate DATETIME,
-> primary key (id,createdate)
-> )
-> PARTITION BY RANGE (TO_DAYS(createdate) ) (
-> PARTITION p201801 VALUES LESS THAN ( TO_DAYS('20180201') ),
-> PARTITION p201802 VALUES LESS THAN ( TO_DAYS('20180301') ),
-> PARTITION p201803 VALUES LESS THAN ( TO_DAYS('20180401') ),
-> PARTITION p201804 VALUES LESS THAN ( TO_DAYS('20180501') ),
-> PARTITION p201805 VALUES LESS THAN ( TO_DAYS('20180601') ),
-> PARTITION p201806 VALUES LESS THAN ( TO_DAYS('20180701') ),
-> PARTITION p201807 VALUES LESS THAN ( TO_DAYS('20180801') ),
-> PARTITION p201808 VALUES LESS THAN ( TO_DAYS('20180901') ),
-> PARTITION p201809 VALUES LESS THAN ( TO_DAYS('20181001') ),
-> PARTITION p201810 VALUES LESS THAN ( TO_DAYS('20181101') ),
-> PARTITION p201811 VALUES LESS THAN ( TO_DAYS('20181201') ),
-> PARTITION p201812 VALUES LESS THAN ( TO_DAYS('20190101') )
-> );
Query OK, 0 rows affected (0.06 sec)
alter table test_range_partition discard partition p201802 tablespace;
[root@localhost target]# ls
db.opt test_range_partition#P#p201805.ibd test_range_partition#P#p201810.ibd
test_range_partition.frm test_range_partition#P#p201806.ibd test_range_partition#P#p201811.ibd
test_range_partition#P#p201801.ibd test_range_partition#P#p201807.ibd test_range_partition#P#p201812.ibd
test_range_partition#P#p201803.ibd test_range_partition#P#p201808.ibd
test_range_partition#P#p201804.ibd test_range_partition#P#p201809.ibd
,
mysql> flush tables test_range_partition for export;
Query OK, 0 rows affected (0.00 sec)
scp ip/test_range_partition#P#p201802.{cfg,ibd} /
, ,
[root@localhost target]# ls
db.opt test_range_partition#P#p201803.ibd test_range_partition#P#p201808.ibd
test_range_partition.frm test_range_partition#P#p201804.ibd test_range_partition#P#p201809.ibd
test_range_partition#P#p201801.ibd test_range_partition#P#p201805.ibd test_range_partition#P#p201810.ibd
test_range_partition#P#p201802.cfg test_range_partition#P#p201806.ibd test_range_partition#P#p201811.ibd
test_range_partition#P#p201802.ibd test_range_partition#P#p201807.ibd test_range_partition#P#p201812.ibd
chown mysql.mysql *
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
mysql> alter table test_range_partition import partition p201802 tablespace; #
ERROR 1812 (HY000): Tablespace is missing for table `target`.`test_range_partition`.
mysql> alter table test_range_partition import partition p201802 tablespace;
Query OK, 0 rows affected (0.02 sec)
mysql> select * from test_range_partition; # , ,
+----+---------------------+
| id | createdate |
+----+---------------------+
| 2 | 2018-02-05 00:00:00 |
| 3 | 2018-02-06 00:00:00 |
+----+---------------------+
2 rows in set (0.00 sec)