Rumah pembangunan bahagian belakang Tutorial Python MySQL中表的复制以及大型数据表的备份教程

MySQL中表的复制以及大型数据表的备份教程

Jun 10, 2016 pm 03:07 PM
mysql Tutorial

表复制
mysql拷贝表操作我们会常常用到,下面就为您详细介绍几种mysql拷贝表的方式,希望对您学习mysql拷贝表方面能够有所帮助。

假如我们有以下这样一个表:

id   username  password 
----------------------------------- 
1    admin    ************* 
2    sameer   ************* 
3    stewart   *************

Salin selepas log masuk

CREATE TABLE IF NOT EXISTS `admin` (  
`id` int(6) unsigned NOT NULL auto_increment,  
`username` varchar(50) NOT NULL default '',  
`password` varchar(100) default NULL,  
PRIMARY KEY (`id`)  
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; 
Salin selepas log masuk

1. 下面这个语句会拷贝表结构到新表newadmin中。 (不会拷贝表中的数据)

CREATE TABLE newadmin LIKE admin

2. 下面这个语句会拷贝数据到新表中。 注意:这个语句其实只是把select语句的结果建一个表。所以newadmin这个表不会有主键,索引。

CREATE TABLE newadmin AS  
(  
SELECT *  
FROM admin  
) 
Salin selepas log masuk


3. 如果你要真正的复制一个表。可以用下面的语句。

CREATE TABLE newadmin LIKE admin;  
INSERT INTO newadmin SELECT * FROM admin; 
Salin selepas log masuk


4. 我们可以操作不同的数据库。

CREATE TABLE newadmin LIKE shop.admin;  
CREATE TABLE newshop.newadmin LIKE shop.admin; 
Salin selepas log masuk



5. 我们也可以拷贝一个表中其中的一些字段。

CREATE TABLE newadmin AS  
(  
SELECT username, password FROM admin  
) 
Salin selepas log masuk


6. 我们也可以讲新建的表的字段改名。

CREATE TABLE newadmin AS  
(  
SELECT id, username AS uname, password AS pass FROM admin  
) 
Salin selepas log masuk


7. 我们也可以拷贝一部分数据。

CREATE TABLE newadmin AS  
(  
SELECT * FROM admin WHERE LEFT(username,1) = 's'  
) 
Salin selepas log masuk


8. 我们也可以在创建表的同时定义表中的字段信息。

CREATE TABLE newadmin  
(  
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY  
)  
AS  
(  
SELECT * FROM admin  
) 

Salin selepas log masuk

MySQL大表备份
这里所说的大表是超过4G以上的表,我目前见到过最大为60多G的单表,对于这种表每天一个全备可以说是一件很痛苦的事。
那么有没有办法,可以实现一个全备加增量的备份呢。
答案当然是有的。

在常规环境直可以用全备加binlog一同保存。
这种环境大多可以用一个Slave上进行备份操作。

思路:
先停止Slave的同步,刷新buffer,对于Innodb 如果想直接拷贝还需要把innodb_max_dirty_pages_pct这个值置为零,然后在执行一次flush tables;
就可以cp了。如果是Dump出来可以这这样做。

这个方案目前来看也是比较完美的,但一个并发力度大的应用一天的Binlog有可能能达到50G-60G,这样的系统开Binlog可以说是对系统的IO性能及整体性能都有早影响。

另一种方案就是基于表的上数据的罗辑变化进行备份。
主体思想:全备加逻辑备份。
逻辑备份:当有数据插入时,利用触发器同时写入另一个表,当数据更新时,我们同时记录一下,更新后的数据情况到另一个表。
当有删除操作时,只需要记录一下,删除的主建ID就行。

例子:
要备份的表:

CREATE TABLE `wubx` ( `id` int(11) NOT NULL auto_increment,  
`user_id` int(11) NOT NULL default '0',  
`friend_id` int(11) NOT NULL default '0',  
`dir_id` int(11) NOT NULL default '0',  
`created` int(11) NOT NULL default '0',  
UNIQUE KEY `id` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
Salin selepas log masuk

对于这个表我们需要建一个记录有新数据变化的表为:

mysql> create table wubx_ii like wubx; 
Query OK, 0 rows affected (0.00 sec) 
 
mysql> create table wubx_uu like wubx; 
Query OK, 0 rows affected (0.00 sec) 
mysql> create table wubx_dd ( id int(11)); 
Query OK, 0 rows affected (0.00 sec) 
Salin selepas log masuk


建立相应的触发程器

记录insert的操作:

delimiter // 
create trigger wubx_ii after insert on wubx for each row begin insert into wubx_ii set id=new.id,user_id=new.user_id,friend_id=new.friend_id,dir_id=new.dir_id,created=new.created; end// 
Salin selepas log masuk

记录update的操作:

create trigger wubx_uu after update on wubx for each row begin replace into wubx_uu set id=new.id,user_id=new.user_id,friend_id=new.friend_id,dir_id=new.dir_id,created=new.created; end// 
Salin selepas log masuk

记录删除的操作:

create trigger wubx_dd after delete on wubx for each row begin insert into wubx_dd values(old.id); end// 
 
delimiter ; 
Salin selepas log masuk


操作:
先备份原始表wubx里的数据:
进行:

insert into wubx values(”,1,10,1,1198464252); 
insert into wubx values(”,1,11,1,1198464252); 
insert into wubx values(”,1,2,1,1198464252); 
insert into wubx values(”,2,10,1,1198464252); 
insert into wubx values(”,2,12,1,1198464252); 
insert into wubx values(”,3,12,1,1198464252); 
update wubx set dir_id=5 where user_id=3; 
update wubx set dir_id=4 where user_id=3; 
delete from wubx where user_id=2 and friend_id=12; 
Salin selepas log masuk

现在要实现增量备份:
取出insert的操作:

mysql -e ” select concat(‘replace into wubx set id=',id,',user_id=',user_id,',friend_id=',friend_id,',dir_id=',dir_id,',created=',created,';') from wubx_ii;”>>backup_ii.sql 
Salin selepas log masuk

取出update的操作:

mysql -e ” select concat(‘update wubx set user_id=',user_id,',friend_id=',friend_id,',dir_id=',dir_id,',created=',created,' where id=',id,';') from wubx_uu;”>>backup_uu.sql 
Salin selepas log masuk

取出delete的操作:

mysql -e “select concat(‘delete from wubx where id=',id,';') from wubx_dd”>>backup_dd.sql 
Salin selepas log masuk

这样利用这些逻辑的备份加是完毕备份恢复到当前恢复点就很容易了。这里不演示。

这个操作最好用一个程序完成,当取完罗辑备份后,做一个标记点去清楚备份完的数据,以保证,逻辑记录表里的数据量比较少是正确的。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mengoptimumkan prestasi pertanyaan MySQL dalam PHP? Bagaimana untuk mengoptimumkan prestasi pertanyaan MySQL dalam PHP? Jun 03, 2024 pm 08:11 PM

Prestasi pertanyaan MySQL boleh dioptimumkan dengan membina indeks yang mengurangkan masa carian daripada kerumitan linear kepada kerumitan logaritma. Gunakan PreparedStatements untuk menghalang suntikan SQL dan meningkatkan prestasi pertanyaan. Hadkan hasil pertanyaan dan kurangkan jumlah data yang diproses oleh pelayan. Optimumkan pertanyaan penyertaan, termasuk menggunakan jenis gabungan yang sesuai, membuat indeks dan mempertimbangkan untuk menggunakan subkueri. Menganalisis pertanyaan untuk mengenal pasti kesesakan; gunakan caching untuk mengurangkan beban pangkalan data;

Bagaimana untuk menggunakan sandaran dan pemulihan MySQL dalam PHP? Bagaimana untuk menggunakan sandaran dan pemulihan MySQL dalam PHP? Jun 03, 2024 pm 12:19 PM

Membuat sandaran dan memulihkan pangkalan data MySQL dalam PHP boleh dicapai dengan mengikuti langkah berikut: Sandarkan pangkalan data: Gunakan arahan mysqldump untuk membuang pangkalan data ke dalam fail SQL. Pulihkan pangkalan data: Gunakan arahan mysql untuk memulihkan pangkalan data daripada fail SQL.

Pada musim panas, anda mesti cuba menembak pelangi Pada musim panas, anda mesti cuba menembak pelangi Jul 21, 2024 pm 05:16 PM

Selepas hujan pada musim panas, anda sering dapat melihat pemandangan cuaca istimewa yang indah dan ajaib - pelangi. Ini juga merupakan pemandangan jarang yang boleh ditemui dalam fotografi, dan ia sangat fotogenik. Terdapat beberapa syarat untuk pelangi muncul: pertama, terdapat titisan air yang mencukupi di udara, dan kedua, matahari bersinar pada sudut yang lebih rendah. Oleh itu, adalah paling mudah untuk melihat pelangi pada sebelah petang selepas hujan reda. Walau bagaimanapun, pembentukan pelangi sangat dipengaruhi oleh cuaca, cahaya dan keadaan lain, jadi ia biasanya hanya bertahan untuk jangka masa yang singkat, dan masa tontonan dan penangkapan terbaik adalah lebih pendek. Jadi apabila anda menemui pelangi, bagaimanakah anda boleh merakamnya dengan betul dan mengambil gambar dengan kualiti? 1. Cari pelangi Selain keadaan yang dinyatakan di atas, pelangi biasanya muncul mengikut arah cahaya matahari, iaitu jika matahari bersinar dari barat ke timur, pelangi lebih cenderung muncul di timur.

Bagaimana untuk memasukkan data ke dalam jadual MySQL menggunakan PHP? Bagaimana untuk memasukkan data ke dalam jadual MySQL menggunakan PHP? Jun 02, 2024 pm 02:26 PM

Bagaimana untuk memasukkan data ke dalam jadual MySQL? Sambung ke pangkalan data: Gunakan mysqli untuk mewujudkan sambungan ke pangkalan data. Sediakan pertanyaan SQL: Tulis pernyataan INSERT untuk menentukan lajur dan nilai yang akan dimasukkan. Laksanakan pertanyaan: Gunakan kaedah query() untuk melaksanakan pertanyaan sisipan Jika berjaya, mesej pengesahan akan dikeluarkan.

Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4 Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4 Dec 09, 2024 am 11:42 AM

Salah satu perubahan utama yang diperkenalkan dalam MySQL 8.4 (keluaran LTS terkini pada 2024) ialah pemalam "Kata Laluan Asli MySQL" tidak lagi didayakan secara lalai. Selanjutnya, MySQL 9.0 mengalih keluar pemalam ini sepenuhnya. Perubahan ini mempengaruhi PHP dan apl lain

Bagaimana untuk menggunakan prosedur tersimpan MySQL dalam PHP? Bagaimana untuk menggunakan prosedur tersimpan MySQL dalam PHP? Jun 02, 2024 pm 02:13 PM

Untuk menggunakan prosedur tersimpan MySQL dalam PHP: Gunakan PDO atau sambungan MySQLi untuk menyambung ke pangkalan data MySQL. Sediakan penyata untuk memanggil prosedur tersimpan. Laksanakan prosedur tersimpan. Proses set keputusan (jika prosedur tersimpan mengembalikan hasil). Tutup sambungan pangkalan data.

Bagaimana untuk membuat jadual MySQL menggunakan PHP? Bagaimana untuk membuat jadual MySQL menggunakan PHP? Jun 04, 2024 pm 01:57 PM

Mencipta jadual MySQL menggunakan PHP memerlukan langkah berikut: Sambung ke pangkalan data. Buat pangkalan data jika ia tidak wujud. Pilih pangkalan data. Buat jadual. Laksanakan pertanyaan. Tutup sambungan.

Bagaimana untuk mendapatkan semula rantaian mata wang maya yang salah? Tutorial tentang mendapatkan semula rantaian pemindahan mata wang maya yang salah Bagaimana untuk mendapatkan semula rantaian mata wang maya yang salah? Tutorial tentang mendapatkan semula rantaian pemindahan mata wang maya yang salah Jul 16, 2024 pm 09:02 PM

Peluasan pasaran maya tidak dapat dipisahkan daripada peredaran mata wang maya, dan secara semula jadi ia juga tidak dapat dipisahkan daripada isu pemindahan mata wang maya. Ralat pemindahan biasa ialah ralat salinan alamat, dan ralat lain ialah ralat pemilihan rantai. Pemindahan mata wang maya ke rantaian yang salah masih menjadi masalah yang sukar, tetapi disebabkan oleh operasi pemindahan yang tidak mahir, orang baru sering memindahkan rantaian yang salah Jadi bagaimana untuk memulihkan rantaian mata wang maya yang salah? Pautan yang salah boleh diambil melalui platform pihak ketiga, tetapi ia mungkin tidak berjaya. Seterusnya, editor akan memberitahu anda secara terperinci untuk membantu anda menjaga aset maya anda dengan lebih baik. Bagaimana untuk mendapatkan semula rantaian mata wang maya yang salah? Proses mendapatkan semula mata wang maya yang dipindahkan ke rantaian yang salah mungkin rumit dan mencabar, tetapi dengan mengesahkan butiran pemindahan, menghubungi bursa atau pembekal dompet, mengimport kunci peribadi ke dompet yang serasi dan menggunakan alat jambatan rantai silang

See all articles