2014-12-03 4 views
1

내 SEO 노력이 Google 웹 사이트 중 하나에 얼마나 효과적 이었는지 입증하기 위해 같은 도메인에있는 위키에 2 일 동안 2601 개의 스팸 페이지가 있습니다 (일치, SERP 2 일 전 ...).마지막 스팸 페이지를 제거한 후 Mediawiki 테이블을 정리합니다.

wiki를 잠그고 (읽기 전용) 차단 목록, Captchas 등을 잠그고 Nuke 확장 프로그램을 사용하여 모든 스팸을 제거했습니다.

자, 이것은 하나의 확장에 대해서는 주목할 만하지만, 여전히 여기저기서 물건을 남겨 두었습니다.

기본적으로 Nuke (공식 확장 프로그램이라고 생각하는)는 pagelinks, searchindex, users 테이블에 "고아"레코드를 남겼습니다.

레코드를 삭제할 때 아무런 문제가 없지만 무작위로 물건을 가지 치기로 데이터베이스 관계 일관성을 깨고 싶지는 않습니다. SQL 쿼리, Linux 명령 행 스크립트 및 모든 종류의 고급 기능을 실행하는 방법을 이해할 수 있습니다.

  • 내가 자유롭게 사용자 테이블 행을 삭제할 수 있습니다 :

    그래서, 여기에 미디어 위키 내부를 알고있는 몇 가지 유용한 StackOverflow의 독자에 대한 몇 가지 질문입니까? SQL 쿼리가 쉽도록 2 행만 유지하면됩니다. 나는 다른 테이블을 연결할 필요가있는 부작용을 일으키고 싶지 않습니다.

  • pagelinks에서 고아 레코드를 제거하려면 어떻게해야합니까? 그들은 분명히 현재 페이지를 가리키고 있지만, 내가 사용했던 기본 유지 관리 Mediawiki 스크립트 (처음에는 핵 확장, 그 다음은 rebuildall.php)는 고아를 버리지 않습니다. 이것은 내가 스크립트가 가리키는 링크를 제거하지 못하게하는 어딘가에서 여전히 가비지가있을 수 있다고 생각하게합니다. 그러나 나는 트리플 페이지를 체크 ... 우리가 만든 몇 페이지 만 더 이상 남아 있습니다. 나는 개정판도 제거했다.

나는 refreshLinks.phporphans.php 스크립트 콘솔을 사용하여 시도했지만 그들은 관련 아무것도하지 않았다.

dumpLinks.php 콘솔 유지 관리 스크립트를 사용하여 모든 종류의 "불편한"단어와 링크를 쉽게 grep 할 수 있기 때문에 pagelinks 테이블을 더 내릴 수 있습니다.

+0

** 블로그 ** 게시물이며 질문이 아니기 때문에이 질문을 오프 토픽으로 닫으려고합니다. –

답변

-1

적어도 하루에 한 번 데이터베이스를 백업하시기 바랍니다. 이 경우 위키가 새로운 것으로 가정하면이 스팸이 아닌 버전의 DB로 되돌리고 경고 또는 수동으로 반복하여 이틀 동안 완료하는 것이 가장 쉬운 방법 일 수 있습니다.

일반적으로 관계형 데이터베이스에는 오류를 표시하거나 작업을 계단식으로 연결하여 일관성없는 상태로 두지 않는 엄격한 관계가 있어야합니다. MediaWiki가 관계를 얼마나 잘 정의했는지 확신 할 수 없습니다.

사용자 테이블에서 행을 제거했지만 아무런 문제가 발생하지 않았습니다. pagelinks 테이블에서 행을 제거하고 어떤 일이 발생하는지 확인하는 것이 좋습니다.

자동 크롤러를 실행하고 오류가 있는지 확인하여 위키의 온전함을 검증 할 수 있습니다.

+0

슬프게도 MySQL 웹 앱에는 참조 무결성 제약 조건이 없습니다. 사실 웹 응용 프로그램은 가장 낮은 분모의 호스팅 서비스에서 실행됩니다. "최저"라는 말은 정말 의미가 있습니다. 당신은 훌륭한 MySQL 설정을 설치하는 꿈을 꾸는 그런 나쁜 서비스를 발견하게됩니다. 따라서이 서비스에서 실행되는 인기있는 웹 응용 프로그램은 원격으로 고급 기능을 필요로하지 않습니다. 참조 무결성 및 저장 프로 시저 지원없이 끝납니다. –

+0

이 말을 듣고 나는 당신과 비슷한 해결책을 생각해 냈습니다. 답으로 받아 들여 지길 원한다면, 아직 모르는 부분을 추가해야합니다. 예를 들어 SELECT SQL 스 니펫은 고아가 된 링크 행의 목록을 출력합니다. –

+0

무결성 제약 조건은 모든 설치에서 작동해야하며 대다수의 DB가 사용 중일 때마다받는 비용은 종종 사소합니다. INSERT 또는 REPLACE를 수행하는 것보다 SELECT를 선택하는 것이 좋지만 많은 시스템에는 적절한 제약 조건이 없습니다. MediaWiki의 DB를 보면 슬픈 IMHO 인 제약 조건 (constraint_schema = 'YOUR_DB'인 information_schema.table_constraints에서 select *)을 보지 못했습니다. 나는 철저히 테스트하지는 않았지만 (SELECT * FROM page (SELECT page_title FROM page)) pagelinks가 시작이 될 수 있지만 내 대답을 받아 들일 필요가없는 SQL 스 니펫을 권유하지는 않을 것입니다. – Collector