Rumah >pangkalan data >tutorial mysql >Fokus pada merekodkan proses pemindahan data peringkat juta Mysql!

Fokus pada merekodkan proses pemindahan data peringkat juta Mysql!

藏色散人
藏色散人ke hadapan
2021-12-20 11:02:582155semak imbas

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.

Fokus pada merekodkan proses pemindahan data peringkat juta Mysql!

Pemilihan rancangan

mysqldump 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.

Proses migrasi

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

  • tetapan item keselamatan mysql

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.

  • Medan jadual data yang diimport dan dieksport tidak sepadan dengan

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

Fokus pada merekodkan proses pemindahan data peringkat juta Mysql!

wxa_fans

Fokus pada merekodkan proses pemindahan data peringkat juta Mysql!

Apabila mengimport data, anda boleh menetapkan nama medan untuk sepadan dengan data medan sasaran Data medan sasaran yang tidak diperlukan boleh dibuang melalui @dummy.

Ringkasan

Berdasarkan pengalaman pemindahan data ini, ringkasannya ialah:

  • Sejumlah kecil data boleh diimport dan dieksport menggunakan Perintah mysqldump Kaedah ini mudah dan mudah.
  • Apabila jumlah data adalah besar dan anda mempunyai kesabaran pemindahan yang mencukupi, anda boleh memilih untuk menulis skrip anda sendiri dan memilih penyelesaian selari yang sesuai untuk memindahkan data Kaedah ini mempunyai kos pengekodan yang lebih tinggi.
  • Apabila jumlah data adalah besar dan anda ingin menyelesaikan pemindahan data dalam masa yang singkat, anda boleh memindahkannya melalui fail import dan eksport mysql, yang lebih cekap.                                                                                                     

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!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam