Rumah >pangkalan data >tutorial mysql >Fokus pada merekodkan proses pemindahan data peringkat juta Mysql!
Andaikan terdapat senario seperti itu, program kecil dibangunkan, dan mengambil kesempatan daripada populariti acara Double Eleven, ia dengan cepat mengumpul lebih daripada satu juta pengguna dalam sebulan Kami menambah biro untuk mengumpul formids pada halaman program kecil Point digunakan untuk menghantar pemberitahuan mesej templat kepada pengguna WeChat.
Apabila jumlah data meningkat, ruang pelayan yang digunakan sebelum ini mula tidak mencukupi Baru-baru ini, saya menulis rangka kerja baharu khusus untuk pembangunan bahagian belakang program kecil, jadi saya ingin memindahkan data asal ke. pangkalan data baharu. Saya membeli mesin 8G 4-teras dan memulakan penghijrahan data. Mari kita buat rekod ringkas tentang proses migrasi.
Dalam perkembangan biasa, kita sering The kaedah sandaran dan migrasi data yang digunakan ialah menggunakan alat mysqldump untuk mengeksport fail sql, dan kemudian mengimport sql ke dalam pangkalan data baharu untuk melengkapkan pemindahan data. [Disyorkan: tutorial video mysql]
Eksperimen mendapati bahawa ia mengambil masa beberapa minit untuk mengeksport pangkalan data sejuta peringkat ke dalam fail sql melalui mysqldump, dan saiz fail sql yang dieksport ialah tentang 1G , dan kemudian salin fail sql 1G ke pelayan lain melalui arahan scp, yang mungkin mengambil masa beberapa minit. Saya menggunakan arahan sumber untuk mengimport data dalam pangkalan data pelayan baharu. Saya menjalankannya sepanjang malam dan data tidak diimport.
Penghijrahan skrip
Mengendalikan pangkalan data secara langsung melalui baris arahan untuk mengeksport dan mengimport data adalah cara yang lebih mudah, tetapi jumlah data adalah besar Dalam kes ini, ia selalunya lebih memakan masa dan memerlukan prestasi pelayan yang lebih tinggi. Jika keperluan masa untuk pemindahan data tidak begitu tinggi, anda boleh cuba menulis skrip untuk memindahkan data. Walaupun saya sebenarnya belum mencubanya, saya rasa mungkin terdapat dua penyelesaian skrip.
Kaedah pertama ialah menjalankan skrip migrasi pada pelayan sasaran migrasi, menyambung dari jauh ke pangkalan data pelayan data sumber, membaca data sumber dalam ketulan dengan menetapkan syarat pertanyaan dan menulisnya ke pangkalan data sasaran selepas membaca. Kaedah migrasi ini mungkin agak tidak cekap Eksport dan import data adalah bersamaan dengan proses segerak dan anda perlu menunggu sehingga bacaan selesai sebelum menulis. Jika syarat pertanyaan direka bentuk secara munasabah, berbilang skrip pemindahan juga boleh dimulakan dalam cara berbilang benang untuk mencapai kesan migrasi selari.
Kaedah kedua boleh digabungkan dengan redis untuk membina penyelesaian migrasi "pengeluaran dan penggunaan". Pelayan data sumber boleh berfungsi sebagai pengeluar data, menjalankan skrip berbilang benang pada pelayan data sumber, membaca data dalam pangkalan data secara selari, dan menulis data ke baris gilir redis. Sebagai pengguna, pelayan sasaran juga menjalankan skrip berbilang benang pada pelayan sasaran, menyambung dari jauh ke redis, membaca data dalam baris gilir redis secara selari, dan menulis data baca ke pangkalan data sasaran. Berbanding dengan kaedah pertama, kaedah ini adalah penyelesaian tak segerak Data import dan eksport data boleh dijalankan pada masa yang sama Dengan menggunakan redis sebagai stesen pemindahan data, kecekapan akan bertambah baik.
Di sini anda juga boleh menggunakan bahasa Go untuk menulis skrip penghijrahan Menggunakan ciri serentak asalnya, anda boleh mencapai tujuan memindahkan data secara selari dan meningkatkan kecekapan penghijrahan.
Penghijrahan Fail
Penyelesaian migrasi pertama terlalu tidak cekap, dan penyelesaian migrasi kedua lebih mahal untuk dikodkan melalui perbandingan dan Selepas dalam talian menganalisis maklumat yang saya cari, akhirnya saya memilih untuk menggunakan mysql. Perintah
select data into outfile file.txt、load data infile file.txt into table
melengkapkan pemindahan berjuta-juta data dalam bentuk fail import dan eksport.
Eksport fail data dalam pangkalan data sumber
select * from dc_mp_fans into outfile '/data/fans.txt';
Salin fail data ke pelayan sasaran
zip fans.zip /data/fans.txtscp fans.zip root@ip:/data/
Import fail dalam pangkalan data sasaran
unzip /data/fans.zipload data infile '/data/fans.txt' into table wxa_fans(id,appid,openid,unionid,@dummy,created_at,@dummy,nickname,gender,avatar_url,@dummy,@dummy,@dummy,@dummy,language,country,province,city,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy);
Ikuti langkah ini dan selesaikan pemindahan merentas pelayan bagi jadual data berjuta peringkat dalam beberapa minit.
Nota
Laksanakan memuatkan data dalam fail dan ke dalam mysql arahan outfile memerlukan pilihan secure_file_priv untuk didayakan dalam mysql Anda boleh menggunakan pembolehubah global seperti '%secure%' untuk menyemak sama ada mysql telah mengaktifkan pilihan ini dilaksanakan.
Ubah suai item konfigurasi mysql melalui vim /etc/my.cnf dan tetapkan nilai secure_file_priv kepada kosong:
[mysqld] secure_file_priv=''
Anda boleh mengimport dan mengeksport fail data melalui arahan.
Dalam contoh di atas, data dipindahkan daripada jadual dc_mp_fans pangkalan data sumber ke jadual wxa_fans pangkalan data sasaran . Medan bagi dua jadual data ialah: dc_mp_fans
wxa_fans
Apabila mengimport data, anda boleh menetapkan nama medan untuk sepadan dengan data medan sasaran Data medan sasaran yang tidak diperlukan boleh dibuang melalui @dummy.
Berdasarkan pengalaman pemindahan data ini, ringkasannya ialah:
Atas ialah kandungan terperinci Fokus pada merekodkan proses pemindahan data peringkat juta Mysql!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!