


Bagaimana untuk mengembangkan medan jadual besar di bawah replikasi lata MySQL
Peluasan medan jadual besar di bawah replikasi lata MySQL
1 Latar Belakang
Perniagaan pelanggan mempunyai jadual dengan kira-kira 400 juta baris Disebabkan oleh pengembangan perniagaan, open_id dalam jadual varchar (50) perlu dikembangkan kepada varchar(500
Semasa perubahan, cuba untuk meminimumkan kesan pada perpustakaan utama (sebaik-baiknya tidak mempunyai sebarang kesan -> Akhirnya, kami berusaha untuk mendapatkan 4). -tempoh tetingkap jam).
2. Maklumat jadual pangkalan data
Persekitaran: Mysql 8.0.22
1 salinan master 1 slave berdasarkan Gtid
1 gambar Jadual? Ya, sila lihat
Fail ibd jadual ini adalah 280G + kiraan tidak kembali untuk masa yang lama + gunakan pangkalan data siap sedia untuk menyemak bilangan baris > 400 juta
以下语句也可以查看: show table status from dbname like 'tablename'\G # Rows 的值不准,有时误差有2倍 SELECT a.table_schema,a.table_name,concat(round(sum(DATA_LENGTH/1024/1024)+sum(INDEX_LENGTH/1024/1024),2) ,'MB')total_size,concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') AS data_size,concat(round(sum(INDEX_LENGTH/1024/1024),2),'MB') AS index_size FROM information_schema.TABLES a WHERE a.table_schema = 'dbname' AND a.table_name = 'tablename'; #看下此表的数据量
Memandangkan ia adalah meja yang besar, apakah kaedah yang perlu kita gunakan untuk membuat perubahan?
3. Pilihan penyelesaian
M dalam berikut mewakili perpustakaan utama, S1 ialah hamba 1, S2 ialah hamba 2
方式 | 优点 | 缺点 | 可行性 |
---|---|---|---|
OnlineDDL | 原生,使用中间临时表 | ALGORITHM=COPY时,会阻塞DML,推荐版本>MySQL5.7 | 5星 |
Gh-ost | 使用binlog+回放线程代替触发器 | 第三方工具,根据不同的参数导致执行时间较长 | 4星 |
Pt-osc | 版本兼容性好,使用触发器保持主副表一致 | 第三方工具,且使用限制较多 | 3星 |
M-S1-S2 | 时间可预估 | 级联复制,人工操作 | 1星 |
Mengapa kita tidak memilih 3 pilihan pertama?
Berdasarkan penilaian situasi sebenar, permintaan pada bahagian perniagaan kali ini ialah Jadual ini mempunyai trafik perniagaan 24 jam sehari dan tidak menerima ketidaktersediaan perniagaan selama lebih daripada 4 jam
kaedah onlineddl, apabila algoritma = salinan, DML akan disekat dalam tempoh (baca sahaja). selesai (masa yang diperlukan tidak pasti).
Adalah disyorkan untuk menyambung ke pustaka hamba dalam mod Gh-ost untuk penukaran Mod ini mempunyai kesan paling sedikit pada pustaka utama dan kawalan aliran boleh ditetapkan melalui parameter. Kelemahan maut alat ini ialah perubahan mengambil masa terlalu lama Untuk jadual dengan 400 juta keping data, ia mengambil masa 70 jam dalam persekitaran ujian. Akhir sekali, kami juga perlu mengeluarkan arahan pensuisan dan memadam secara manual jadual perantaraan *_del. Kelebihan penyelesaian ini ialah terdapat pangkalan data hamba untuk memastikan keselamatan data, jadi jika anda menggunakan seni bina 1 master 2 hamba, ia lebih disyorkan.
Pt-osc dan Gh-ost kedua-duanya dimiliki oleh pihak ketiga yang mengendalikan jadual besar Pt-osc dan OnlineDDL mempunyai kelemahan yang sama, iaitu kos pemulangan semula pada kegagalan adalah sangat tinggi.
Jika ia adalah versi yang lebih rendah seperti MySQL
Akhirnya, kami memilih kaedah kegemaran (xin ku) DBA, yang dilakukan di bawah replikasi lata M-S1-S2.
4. Cara mengendalikan
Buat pangkalan data hamba S1 baharu dan bina replikasi lata M-S1-S2
Gunakan OnlineDDL untuk melakukan pengembangan medan pada S2 (kelebihannya ialah induk M-S1 tidak pernah terjejas dalam tempoh tersebut)
Selepas pengembangan selesai, tunggu penyegerakan tertunda M -S1-S2 (kurangkan perbezaan Data S2 dengan M dan lakukan pengesahan data)
Alih keluar S1 dan wujudkan hubungan tuan-hamba antara M-S2 (membenarkan S2 meneruskan penyegerakan data M)
Sandarkan S2 dan pulihkan S1, wujudkan replikasi lata M-S2-S1
Hentikan aplikasi dan tunggu data tuan-hamba untuk konsisten (kelebihannya ialah masa penyegerakan jumlah data yang berbeza Sangat singkat)
Akhirnya S2 menjadi perpustakaan induk dan S1 ialah perpustakaan hamba (aplikasi perlu mengubah suai bahagian hadapan- tamatkan maklumat sambungan)
Aplikasi menjalankan pengesahan regresi
Kandungan di atas mungkin kelihatan rumit, tetapi ia pada asasnya adalah sandaran dan pemulihan . Pembaca boleh menganggap ini sebagai alternatif. Kongsi langkah tertentu?
环境装备:开启Gtid,注意M,S1 binlog保存时长,磁盘剩余空间大于待变更表的2倍 show global variables like 'binlog_expire_logs_seconds'; # 默认604800 set global binlog_expire_logs_seconds=1209600; # 主库和级联主库都需要设置 1.搭建 1主2从的级联复制,M -> S1 -> S2 ,安装MySQL注意本次环境lower_case_table_names = 0 2.在S2 上做字段扩容。 预估 10个小时 `参数设置:` set global slave_type_conversions='ALL_NON_LOSSY'; # 防止复制报错SQL_Errno: 13146,属于字段类型长度不一致无法回放 set global interactive_timeout=144000;set global wait_timeout =144000; `磁盘IO参数设置:` set global innodb_buffer_pool_size=32*1024*1024*1024;# 增加buffer_pool 防止Error1206The total number of locks exceeds the lock table size 资源不足 set global sync_binlog=20000;set global innodb_flush_log_at_trx_commit=2; set global innodb_io_capacity=600000;set global innodb_io_capacity_max=1200000; # innodb_io_capacity需要设置两次 show variables like '%innodb_io%'; # 验证以上设置 screen 下执行: time mysql -S /data/mysql/3306/data/mysqld.sock -p'' dbname -NBe "ALTER TABLE tablename MODIFY COLUMN open_id VARCHAR(500) NULL DEFAULT NULL COMMENT 'Id' COLLATE 'utf8mb4_bin';" 查看DDL进度: SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_current; 3.扩容完成后,等待延迟同步M-S1-S2 数据同步至主从一致,对比主从Gtid 4.移除S1,建立M-S2的主从关系 S1 (可选) stop slave; reset slave all; systemctl stop mysql_3306 S2 stop slave; reset slave all; # MASTER_HOST='M主机IP' CHANGE MASTER TO MASTER_HOST='', MASTER_USER='', MASTER_PASSWORD=', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_CONNECT_RETRY=10; start slave; (flush privileges;# 验证数据可正常同步) 5.备份S2恢复S1,建立M-S2-S1级联复制 物理备份S2,重做S2->S1 级联主从 rm -rf binlog/* rm -rf redolog/* xtrabackup --defaults-file=/data/mysql/3306/my.cnf.3306 --move-back --target-dir=/data/actionsky/xtrabackup_recovery/data chown -R mysql. data/ chown -R mysql. binlog/* chown -R mysql. redolog/* systemctl start mysql_3306 set global gtid_purged=''; reset slave all; # MASTER_HOST='S2主机IP' ,已扩容变更完的主机 CHANGE MASTER TO MASTER_HOST='', MASTER_USER='', MASTER_PASSWORD='', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_CONNECT_RETRY=10; `MySQL8.0版本需要在上面语句中添加 GET_MASTER_PUBLIC_KEY=1; #防止 Last_IO_Errno: 2061 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.` start slave; 6.应用停服,等待主从数据一致 主库停服+可设置read_only+flush privileges,对比主从Gtid 7.最终S2成为主库,S1为从库 应用更改配置连接新主库。 S2上: stop slave;reset slave all; set global read_only=0;set global super_read_only=0; `show master status\G 观察是否有新事务写入` 收尾:还原第2步的参数设置。 set global interactive_timeout=28800;set global wait_timeout =28800; set global innodb_buffer_pool_size=8*1024*1024*1024; set global slave_type_conversions=''; set global sync_binlog=1;set global innodb_flush_log_at_trx_commit=1; set global innodb_io_capacity=2000;set global innodb_io_capacity_max=4000;
Senario tambahan: Ujian berdasarkan keupayaan IO cakera
Ubah suai terus pada pustaka utama tanpa trafik Kes:
Senario 1, cakera ialah mesin fizikal NVME, dan ia mengambil masa kira-kira 5 jam untuk memproses 400 juta data (prestasi cakera 1G/s).
Senario 2, cakera ialah mesin maya dengan cakera mekanikal Jumlah data ini mengambil masa kira-kira 40 jam (prestasi cakera 100M/s).
Atas ialah kandungan terperinci Bagaimana untuk mengembangkan medan jadual besar di bawah replikasi lata MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

MySQL sesuai untuk pemula untuk mempelajari kemahiran pangkalan data. 1. Pasang alat pelayan dan klien MySQL. 2. Memahami pertanyaan SQL asas, seperti SELECT. 3. Operasi data induk: Buat jadual, masukkan, kemas kini, dan padam data. 4. Belajar Kemahiran Lanjutan: Fungsi Subquery dan Window. 5. Debugging dan Pengoptimuman: Semak sintaks, gunakan indeks, elakkan pilih*, dan gunakan had.

MySQL dengan cekap menguruskan data berstruktur melalui struktur jadual dan pertanyaan SQL, dan melaksanakan hubungan antara meja melalui kunci asing. 1. Tentukan format data dan taip apabila membuat jadual. 2. Gunakan kunci asing untuk mewujudkan hubungan antara jadual. 3. Meningkatkan prestasi melalui pengindeksan dan pengoptimuman pertanyaan. 4. Secara kerap sandaran dan memantau pangkalan data untuk memastikan pengoptimuman keselamatan data dan prestasi.

MySQL adalah sistem pengurusan pangkalan data sumber terbuka yang digunakan secara meluas dalam pembangunan web. Ciri -ciri utamanya termasuk: 1. Menyokong pelbagai enjin penyimpanan, seperti InnoDB dan Myisam, sesuai untuk senario yang berbeza; 2. Menyediakan fungsi replikasi master-hamba untuk memudahkan pengimbangan beban dan sandaran data; 3. Meningkatkan kecekapan pertanyaan melalui pengoptimuman pertanyaan dan penggunaan indeks.

SQL digunakan untuk berinteraksi dengan pangkalan data MySQL untuk merealisasikan penambahan data, penghapusan, pengubahsuaian, pemeriksaan dan reka bentuk pangkalan data. 1) SQL Melaksanakan operasi data melalui Pilih, Masukkan, Kemas kini, Padam Penyataan; 2) Gunakan pernyataan membuat, mengubah, drop untuk reka bentuk dan pengurusan pangkalan data; 3) Pertanyaan kompleks dan analisis data dilaksanakan melalui SQL untuk meningkatkan kecekapan membuat keputusan perniagaan.

Operasi asas MySQL termasuk membuat pangkalan data, jadual, dan menggunakan SQL untuk melakukan operasi CRUD pada data. 1. Buat pangkalan data: createdatabasemy_first_db; 2. Buat Jadual: CreateTableBooks (Idintauto_IncrementPrimaryKey, Titlevarchar (100) NotNull, Authorvarchar (100) NotNull, Published_yearint); 3. Masukkan Data: InsertIntoBooks (Tajuk, Pengarang, Published_year) VA

Peranan utama MySQL dalam aplikasi web adalah untuk menyimpan dan mengurus data. 1.MYSQL dengan cekap memproses maklumat pengguna, katalog produk, rekod urus niaga dan data lain. 2. Melalui pertanyaan SQL, pemaju boleh mengekstrak maklumat dari pangkalan data untuk menghasilkan kandungan dinamik. 3.MYSQL berfungsi berdasarkan model klien-pelayan untuk memastikan kelajuan pertanyaan yang boleh diterima.

Langkah -langkah untuk membina pangkalan data MySQL termasuk: 1. Buat pangkalan data dan jadual, 2. Masukkan data, dan 3. Pertama, gunakan pernyataan CreatedataBase dan createtable untuk membuat pangkalan data dan jadual, kemudian gunakan pernyataan InsertInto untuk memasukkan data, dan akhirnya gunakan pernyataan PILIH untuk menanyakan data.

MySQL sesuai untuk pemula kerana mudah digunakan dan berkuasa. 1.MYSQL adalah pangkalan data relasi, dan menggunakan SQL untuk operasi CRUD. 2. Ia mudah dipasang dan memerlukan kata laluan pengguna root untuk dikonfigurasi. 3. Gunakan Masukkan, Kemas kini, Padam, dan Pilih untuk Melaksanakan Operasi Data. 4. Orderby, di mana dan menyertai boleh digunakan untuk pertanyaan yang kompleks. 5. Debugging memerlukan memeriksa sintaks dan gunakan Jelaskan untuk menganalisis pertanyaan. 6. Cadangan pengoptimuman termasuk menggunakan indeks, memilih jenis data yang betul dan tabiat pengaturcaraan yang baik.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

Dreamweaver CS6
Alat pembangunan web visual

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.