GNU/Linux >> Belajar Linux >  >> Linux

meningkatkan kecepatan impor mysql

Melakukan dump dan restore dengan cara yang dijelaskan berarti MySQL harus membangun kembali indeks sepenuhnya saat data diimpor. Itu juga harus mengurai data setiap kali.

Akan jauh lebih efisien jika Anda dapat menyalin file data dalam format yang sudah dipahami oleh MySQL. Cara yang baik untuk melakukannya adalah dengan menggunakan innobackupex dari Percona

(Sumber Terbuka dan didistribusikan sebagai bagian dari XtraBackup tersedia untuk diunduh dari sini).

Ini akan mengambil snapshot dari tabel MyISAM, dan untuk tabel InnoDB akan menyalin file yang mendasarinya, lalu memutar ulang log transaksi terhadapnya untuk memastikan status yang konsisten. Itu dapat melakukan ini dari server langsung tanpa waktu henti (saya tidak tahu apakah itu persyaratan Anda?)

Saya sarankan Anda membaca dokumentasinya, tetapi untuk mengambil cadangan dalam bentuk yang paling sederhana, gunakan:

$ innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/
$ innobackupex --apply-log /path/to/BACKUP-DIR/

Jika data berada di mesin yang sama, maka innobackupex bahkan memiliki perintah pemulihan sederhana:

$ innobackupex --copy-back /path/to/BACKUP-DIR

Ada lebih banyak opsi dan cara berbeda untuk benar-benar melakukan pencadangan, jadi saya sangat menyarankan Anda membaca dokumentasi dengan baik sebelum memulai.

Untuk referensi kecepatan, server uji lambat kami, yang mencapai sekitar 600 IOPS, dapat memulihkan cadangan 500 GB dalam waktu sekitar 4 jam menggunakan metode ini.

Terakhir:Anda menyebutkan apa yang dapat dilakukan untuk mempercepat pengimporan. Ini sebagian besar akan tergantung pada apa leher botolnya. Biasanya, operasi impor terikat I/O (Anda dapat mengujinya dengan memeriksa io menunggu) dan cara untuk mempercepatnya adalah dengan throughput disk yang lebih cepat - baik disk yang lebih cepat itu sendiri, atau lebih banyak secara bersamaan.


Pastikan Anda meningkatkan "max_allowed_packet Anda " ke ukuran yang cukup besar. Ini akan sangat membantu jika Anda memiliki banyak data teks. Menggunakan perangkat keras berperforma tinggi pasti akan meningkatkan kecepatan pengimporan data.

mysql --max_allowed_packet=256M -u root -p < "database-file.sql"

Satu hal yang dapat Anda lakukan adalah

SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS=0

Dan Anda juga bisa bermain dengan nilai

innodb_buffer_pool_size
innodb_additional_mem_pool_size
innodb_flush_method

di my.cnf untuk membuat Anda maju tetapi secara umum Anda harus melihat parameter innodb lainnya juga untuk melihat apa yang paling cocok untuk Anda.

Ini adalah masalah yang saya alami di masa lalu yang saya rasa belum saya tangani sepenuhnya, tetapi saya harap saya telah mengarahkan diri saya ke arah ini sejak awal. Akan menghemat waktu saya sendiri.


Ada banyak parameter yang hilang, untuk memahami sepenuhnya penyebab masalahnya. seperti:

  1. Versi MySQL
  2. Jenis dan kecepatan disk
  3. Kosongkan memori di server sebelum Anda memulai server MySQL
  4. output iostat sebelum dan pada saat mysqldump.
  5. Apa saja parameter yang Anda gunakan untuk membuat file dump.

dan banyak lagi.

Jadi saya akan mencoba menebak bahwa masalah Anda ada di disk karena saya memiliki 150 contoh MySQL yang saya kelola dengan 3TB data di salah satunya, dan biasanya masalahnya adalah disk

Sekarang ke solusinya:

Pertama-tama - MySQL Anda tidak dikonfigurasi untuk kinerja terbaik.

Anda dapat membaca tentang pengaturan yang paling penting untuk dikonfigurasi di posting blog Percona:http://www.percona.com/blog/2014/01/28/10-mysql-settings-to-tune-after-installation/

Terutama periksa parameternya:

innodb_buffer_pool_size 
innodb_flush_log_at_trx_commit
innodb_flush_method

Jika masalah Anda adalah disk - membaca file dari drive yang sama - memperburuk masalah.

Dan jika server MySQL Anda mulai bertukar karena tidak memiliki cukup RAM - masalah Anda menjadi lebih besar.

Anda perlu menjalankan diagnostik pada mesin Anda sebelum dan pada saat prosedur pemulihan untuk mengetahuinya.

Selain itu, saya dapat menyarankan Anda untuk menggunakan teknik lain untuk melakukan tugas pembangunan kembali, yang bekerja lebih cepat daripada mysqldump.

Ini adalah Percona Xtrabackup - http://www.percona.com/doc/percona-xtrabackup/2.2/

Anda perlu membuat cadangan dengannya, dan memulihkannya, atau membangun kembali dari menjalankan server secara langsung dengan opsi streaming.

Selain itu, versi MySQL mulai dari 5.5 - InnoDB bekerja lebih cepat daripada MyISAM. Pertimbangkan untuk mengubah semua tabel Anda menjadi itu.


Linux
  1. Impor Database MySQL

  2. Impor Database ke Instans MySQL Lokal

  3. Cara Mengimpor Database Ekspor di MYSQL MariaDB

  1. mysql tidak dimulai setelah merelokasi dir data

  2. Tidak dapat menampilkan data MySQL ke file

  3. Mengaktifkan LOAD DATA LOCAL INFILE di mysql

  1. Tingkatkan caching Database MySQL

  2. MySQL – Mengonversi ke Data Per Tabel untuk InnoDB

  3. Impor Beberapa File SQL Di MySQL