Dimungkinkan juga untuk melakukan apa yang Anda inginkan dengan secara langsung memanipulasi basis data. Detail di sana dapat sedikit berbeda tergantung pada situasi Anda, tetapi langkah-langkah dasarnya akan seperti ini:
Atur wiki Anda ke mode hanya baca . Anda tidak ingin seseorang mencoba mengedit wiki saat Anda mengacaukan basis data.
Buat cadangan untuk wiki Anda. (Ini sangat disarankan sebelum penghapusan massal yang tidak dapat dibatalkan.)
Hapus semua akun pengguna yang dibuat oleh spammer. Jika, seperti pada pertanyaan di atas, Anda adalah satu-satunya pengguna yang valid, Anda bisa melakukan:
DELETE FROM user WHERE user_id != YOUR_USER_ID;
Atau, jika tidak ada akun valid yang baru dibuat setelah spammer menemukan wiki, Anda dapat menemukan nomor ID pengguna tertinggi yang valid dan lakukan:
DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;
Atau Anda dapat menggunakan alat admin seperti phpMyAdmin untuk secara manual memilih akun yang valid dan menghapus sisanya.
Bersihkan data tambahan yang terkait dengan akun yang dihapus. Ini tidak sepenuhnya diperlukan, tetapi catatan yatim itu tidak digunakan dan hanya akan mengacaukan basis data Anda jika Anda tidak menghapusnya:
DELETE FROM user_groups WHERE ug_user NOT IN (SELECT user_id FROM user);
DELETE FROM user_properties WHERE up_user NOT IN (SELECT user_id FROM user);
DELETE FROM user_newtalk WHERE user_id NOT IN (SELECT user_id FROM user);
Hapus semua revisi yang tidak dilakukan oleh pengguna yang valid:
Ini adalah langkah besar; semuanya sebelum persiapan, semuanya setelah pembersihan. Dengan semua akun spam dihapus, Anda bisa melakukan:
DELETE FROM revision WHERE rev_user > 0 AND rev_user NOT IN (SELECT user_id FROM user);
Jika wiki Anda telah menonaktifkan penyuntingan anonim (yang saya sangat sarankan untuk wiki pribadi / uji), pertanyaan di atas harus cukup untuk menyingkirkan semua revisi spam. Namun, jika Anda mengaktifkan penyuntingan langsung, Anda harus menghapus spam anonim secara terpisah.
Jika Anda yakin bahwa semua suntingan pada wiki Anda adalah spam, satu-satunya suntingan yang dibuat oleh UID 0 yang mungkin perlu kami pertahankan adalah yang dibuat oleh MediaWiki sendiri (seperti halaman yang diimpor dari luar wiki). Dalam hal itu, sesuatu seperti kueri berikut harus berfungsi:
DELETE FROM revision WHERE rev_user = 0 AND rev_user_text BETWEEN '1' AND '999';
Ini akan menghapus revisi apa pun oleh UID 0 di mana nama pengguna terlihat (samar-samar) seperti alamat IPv4; yaitu dimulai dengan angka antara 1 dan 9.
Jika wiki Anda memiliki beberapa suntingan langsung yang sah, Anda mungkin harus sedikit lebih kreatif. Jika jumlah alamat IP yang digunakan oleh editor tidak terdaftar yang sah terbatas, Anda bisa menambahkan klausa seperti AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')
pada kueri di atas untuk mengecualikan kontribusi oleh IP tersebut dari penghapusan. Anda juga dapat menambahkan kondisi seperti, misalnya, AND rev_user_text NOT LIKE '192.168.%'
untuk menyimpan semua pengeditan dari alamat IP yang diawali dengan awalan tertentu.
Kueri di atas akan menyingkirkan revisi spam (meskipun kontennya akan tetap ada di text
tabel), tetapi akan meninggalkan page_latest
bidang halaman yang terpengaruh yang mengarah ke revisi yang tidak ada. Ini dapat menyebabkan kebingungan, jadi sebaiknya kita perbaiki.
Pertama, kita perlu menghapus page_latest
kolom untuk semua halaman:
UPDATE page SET page_latest = 0;
Selanjutnya, kita akan membangun kembali kolom, baik dengan menjalankan skrip pemeliharaan attachLatest.php (disarankan; ingatlah untuk menggunakan --fix
parameter sehingga skrip benar-benar mengubah database) atau dengan kueri SQL manual:
UPDATE page SET page_latest =
(SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
Terakhir, kami akan menghapus semua halaman yang tidak dapat ditemukan revisi yang valid (karena dibuat oleh pengirim spam, dan tidak pernah memiliki konten yang valid):
DELETE FROM page WHERE page_latest = 0;
Untuk sentuhan terakhir, buat kembali tautan, indeks teks dan tabel perubahan terbaru dengan menjalankan skrip pemeliharaan rebuildall.php . Anda juga mungkin ingin menghapus konten revisi spam yang dihapus dari database, sehingga mereka tidak akan mengambil ruang yang tidak perlu di sana, dengan menjalankan skrip pemeliharaan purgeOldText.php .
Setelah semuanya selesai, periksa apakah semuanya terlihat baik, dan jika demikian, matikan mode read-only - semoga setelah menginstal beberapa fitur anti-spam untuk mencegah masalah terulang kembali.