Mengatasi Error Tabel MySQL Hilang (gtid_slave_pos, innodb_index_stats) pada Zimbra

Posted by

Beberapa hari yang lalu, salah satu host server yang digunakan di datacenter mengharuskan emergency maintenance. Hal tersebut mengakibatkan salah satu server yang ada di atasnya harus dipindahkan ke dalam host lain. Kebetulan server tersebut adalah Zimbra Mail Server dan diinstall di atas VM.

Proses pemindahan membutuhkan waktu kurang dari 1 jam. Setelah server Zimbra Mail dipindahkan, ternyata servicesnya tidak dapat distart secara normal. Ada kendala di sisi database yang tidak mau start. Belum diketahui penyebab dari kendala tersebut apa. Apakah karena power off tiba-tiba atau yang lainnya.

Untuk mengatasi kendala tersebut, dilakukanlah proses recovery sesuai dengan petunjuk pada Zimbra Wiki: https://wiki.zimbra.com/wiki/Mysql_Crash_Recovery

Proses recovery berjalan lancar. Namun ada kendala ketika dilakukan pengecekan via dbintegrity. Yaitu hilangnya tabel gtid_slave_pos, innodb_index_stats, dan innodb_table_stats seperti berikut:

Untuk mengembalikan table tersebut, dilakukan recovery sebagai berikut:

# Stop service Zimbra

su - zimbra
zmcontrol stop

# Backup DB sebelum dilakukan recovery

cp -r /opt/zimbra/db /opt/zimbra/db-backup

# Hapus file table innodb dan gtid

cd /opt/zimbra/db/data/mysql/
rm -f innodb_* gtid_slave_pos.*

# Start service Zimbra Mysql

mysql.server start

# Buat ulang table innodb dan gtid

Table yang dibuat berjumlah 3 table

mysql mysql -e "CREATE TABLE innodb_index_stats (
         database_name                           VARCHAR(64) NOT NULL,
         table_name                                      VARCHAR(64) NOT NULL,
         index_name                                      VARCHAR(64) NOT NULL,
         last_update                                     TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
         /* there are at least:
         stat_name='size'
         stat_name='n_leaf_pages'
         stat_name='n_diff_pfx%' */
         stat_name                                       VARCHAR(64) NOT NULL,
         stat_value                                      BIGINT UNSIGNED NOT NULL,
         sample_size                                     BIGINT UNSIGNED,
         stat_description                        VARCHAR(1024) NOT NULL,
         PRIMARY KEY (database_name, table_name, index_name, stat_name)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0"

mysql mysql -e "CREATE TABLE IF NOT EXISTS innodb_table_stats (
         database_name                           VARCHAR(64) NOT NULL,
         table_name                                      VARCHAR(64) NOT NULL,
         last_update                                     TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
         n_rows                                          BIGINT UNSIGNED NOT NULL,
         clustered_index_size            BIGINT UNSIGNED NOT NULL,
         sum_of_other_index_sizes        BIGINT UNSIGNED NOT NULL,
         PRIMARY KEY (database_name, table_name)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0"

mysql mysql -e "CREATE TABLE IF NOT EXISTS gtid_slave_pos (
domain_id INT UNSIGNED NOT NULL,
sub_id BIGINT UNSIGNED NOT NULL,
server_id INT UNSIGNED NOT NULL,
seq_no BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (domain_id, sub_id))
COMMENT='Replication slave GTID position'"

Table system tersebut diambil dari file mysql_system_tables.sql. File tersebut dapat dicari via perintah berikut

find /opt/zimbra/ -name mysql_system_tables.sql

# Stop service mysql

mysql.server stop

# Start Zimbra Service

zmcontrol start

# Cek via zmdbintegrityreport

/opt/zimbra/libexec/zmdbintegrityreport -v

Setelah tidak ada error, akhirnya Zimbra dapat digunakan kembali

Silakan dicoba dan semoga bermanfaat 🙂

Source: https://heholdsthekeys.net/doku.php?id=tech_documents:zimbra:fix_database_issues

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.