ใครลง WPMU แล้ว tables เยอะจัด ลองทำ Multiple databases ดูซิ

เริ่มโดย untilate, 27 ธันวาคม 2009, 20:40:37

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

untilate

Multiple databases plugin (db.php) for WordPress MU



I was working on importing 1600+ separate WordPress blogs to WordPress MU. In a week, I managed to successfully import all those blogs using my custom import/export scripts. My WordPress MU database was containing 10.000+ tables, and IMHO that was pretty horrible. I tried to figure out "WP_USE_MULTIPLE_DB" by checking the code, and looking for some other free solutions, but couldn’t find anything working the way I wanted.

Here is my multi database plugin for WordPress MU. It can work with any number of databases (I am currenly using 128 databases, so I have around 100 tables in each database). Also, I am providing split_dbs scripts, witch will copy tables from single Wordpress MU database, to multiple databases.

Installation/Configuration

Copy db.php to a temporary directory. On lines 59, 60 find:
var $max_dbs = 128;
var $base_db_name = 'blog_';


In $max_dbs put number of databases you are planning to use. $base_db_name is database name prefix, so if you put i.e. ‘blog_’, your databases will be named blog_0, blog_1, blog_2 etc up to (in this case) blog_127.
When you are done with those variables, copy this file to wp-content directory.

Now you need to edit split_dbs.php. At the top of the file you will find configuration block. Please make sure you set exactly the same values for $max_dbs and $base_db_name like you have in db.php, and database connection parameters (including table prefix) that you are using in wp-config.php.
When you are done editing split_dbs.php, call this script from your browser or command line.


Download: http://webdevguru.com/dl/multi_db_wpmu_271.zip
Thank: http://webdevguru.com/wpmu-hacks.html

จะใช้งานจริงๆ จะติดตอน create db ต้องศึกษา DirectAdmin API นิดหน่อย (สำหรับโฮส DirectAdmin)
http://www.directadmin.com/api.html

หรือหากไม่รู้เรื่องก็ใช้แบบนี้ (แบบนี้โหดไปหน่อย ทำเหมือนกับเข้าไปสร้าง db ใน da)

<?
$ch =curl_init('http://domain.com:2222/CMD_DB');
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, "domain=domain.com&action=create&name=test&user=test&passwd=123456&passwd2=123456");
$res = curl_exec ($ch);
print_r($res);
?>

โค้ดนี้ เครดิต คุณ Thaitumweb

desiger

ว้าวๆๆๆๆ

ขอบคุณครับบบ

เดยวลองมั่วดู

อิอิ
มาอัพเดท [direct=http://www.nod32ze3.com]NOD32[/direct] รหัส NOD32 Username Password NOD 32 กันครับ [direct=http://fundz3.bloggang.com][/direct] [direct=http://my.dek-d.com/dlzdekd/blog][/direct]

untilate


easyeasy


benz4543

อ่านแล้ว งงครับ มีแบบ เข้าใจง่ายหน่อยครับ
ผมทำตามไม่ได้สะที
ผมใช้ wpmu ที่ hostmonster เลยสนใจตัวนี้ครับ
รบกวนอธิบายอีกนืด

untilate

เดี๋ยวผมจะมาสอนเป็นภาษาไทยให้อีกทีนะครับ

แต่ของย้ำว่า ถ้าภาษาอักกฤษไม่แย่เกินไป ก็เข้าใจครับ แค่อ่านตามนั้นแล้วทำตามเลย..

ดูภาพข้างบนยืนยัน

ช่วงนี้ผมสอบได้แต่แว๊บๆ มาครับ เดี๋ยวอาทิตย์ปีใหม่จะมาสอนให้ครับ

pigdoll


benz4543

แบบนี้ เรียกว่า wild card หรือเปล่าครับ

ที่ hostmonster ทำแบบนี้ ไม่ได้ครับ
มีวิธีอื่นอีกหรือเปล่าครับ

wpmu แบบ subdomain ใน hostmoster

ผมมี 2 host ใช้ wildcard ไม่ได้ทั้ง 2 host เลย
hostinglotus ของไทย
hostmonster    usa

อื้อ ท่านเทพ ช่วยสอนหน่อยครับ

untilate

อ้างถึงจาก: benz4543 ใน 28 ธันวาคม 2009, 19:10:41
แบบนี้ เรียกว่า wild card หรือเปล่าครับ

ที่ hostmonster ทำแบบนี้ ไม่ได้ครับ
มีวิธีอื่นอีกหรือเปล่าครับ

wpmu แบบ subdomain ใน hostmoster

ผมมี 2 host ใช้ wildcard ไม่ได้ทั้ง 2 host เลย
hostinglotus ของไทย
hostmonster    usa

อื้อ ท่านเทพ ช่วยสอนหน่อยครับ


คนละเรื่องกันครับ นี่ไม่ได้เกี่ยวกับโดเมน

มันเกี่ยวกับ ฐานข้อมูลอะครับ

แบบ แบ่งเป็นฐานข้อมูลย่อยๆ จะได้ลด record ครับ

keox

[direct=https://www.bluedragonlucky.com/]มังกรฟ้า[/direct]
[direct=https://www.bluedragonlucky.com/2021/06/blog-post_20.html]ล็อตเตอรี่ออนไลน์[/direct]

untilate


PLUS+

อ้างถึงจาก: untilate ใน 29 ธันวาคม 2009, 23:26:55
หลังปีใหม่นะ

เหมือนกันครับต้อง Backup กันยกใหญ่เลย 700MB กว่าๆ  :P
[direct=http://www.clicksketch.com]รับทำเว็บ[/direct] | [direct=http://www.thaihotzone.com]ภาวะโลกร้อน[/direct] | [direct=http://www.androidosx.com]Android[/direct] | [direct=http://www.probotdl.com]โปร SF[/direct]

รับออกแบบปรับแต่งเว็บไซต์โดยใช้ WordPress ติดต่อทาง PM

kanokk

ขอขุดหน่อยนะครับ
ตอนนี้ WP 2.9.X แล้วอ่ะครับ
ไม่ทราบว่าใครมีไฟลล์ plugin ตัว MultiDB ที่รองรับ WPMU ตัวนี้ บ้างอ่ะครับ
รบกวนขอหน่อยนะครับ
[direct=http://www.photonvps.com/billing/aff.php?aff=540]PhotonVPS.com : VPS แรงๆ SSD Cluod ราคา $5.95[/direct]
[direct=http://myvirpus.com/aff.php?aff=243]Virpus.com VPS ดีๆ ราคาถูก XEN VPS ลด 10% โค้ด 20OFF012014 และ SSD Cloud VPS [/direct]
[direct=http://secure.hostgator.com/~affiliat/cgi-bin/affiliates/clickthru.cgi?id=kanokk5]HostGator ใช้คูปอง bigsavergator เหลือ 0.01$[/direct]

Sevennight

อ๋อ ได้ความรู้เลยครับ เห็นเค้าพูดกันไม่รู้มันคืออะไร  :wanwan017:
[direct=http://www.theodyssey-chiangmai.com/]The Odyssey Serviced Apartment Chiang Mai[/direct]

nulek101


จะใช้งานจริงๆ จะติดตอน create db ต้องศึกษา DirectAdmin API นิดหน่อย (สำหรับโฮส DirectAdmin)
http://www.directadmin.com/api.html

หรือหากไม่รู้เรื่องก็ใช้แบบนี้ (แบบนี้โหดไปหน่อย ทำเหมือนกับเข้าไปสร้าง db ใน da)

<?
$ch =curl_init('http://domain.com:2222/CMD_DB');
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, "domain=domain.com&action=create&name=test&user=test&passwd=123456&passwd2=123456");
$res = curl_exec ($ch);
print_r($res);
?>

โค้ดนี้ เครดิต คุณ Thaitumweb
[/quote]

เราเอา โค๊ตข้างบน  ไปใส่ที่ไหนเหรอครับ

untilate

อ้างถึงจาก: nulek101 ใน 21 มีนาคม 2010, 09:14:52

จะใช้งานจริงๆ จะติดตอน create db ต้องศึกษา DirectAdmin API นิดหน่อย (สำหรับโฮส DirectAdmin)
http://www.directadmin.com/api.html

หรือหากไม่รู้เรื่องก็ใช้แบบนี้ (แบบนี้โหดไปหน่อย ทำเหมือนกับเข้าไปสร้าง db ใน da)

<?
$ch =curl_init('http://domain.com:2222/CMD_DB');
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, "domain=domain.com&action=create&name=test&user=test&passwd=123456&passwd2=123456");
$res = curl_exec ($ch);
print_r($res);
?>

โค้ดนี้ เครดิต คุณ Thaitumweb

เราเอา โค๊ตข้างบน  ไปใส่ที่ไหนเหรอครับ
[/quote]

ในไฟล์ที่ดาวโหลดไปอะ เอาไปแทน code สร้าง ตาราง sql อะ

tenzamak

จริงๆแล้ว ถ้าเป็น vps   api ไม่ต้องใช้นะครับ
ส่วนโฮสปกติ admin ไม่ยอมเซ็ตแน่ๆเลย

nulek101

อ้างถึงจาก: tenzamak ใน 21 มีนาคม 2010, 09:21:15
จริงๆแล้ว ถ้าเป็น vps   api ไม่ต้องใช้นะครับ
ส่วนโฮสปกติ admin ไม่ยอมเซ็ตแน่ๆเลย

สรุปว่า ไม่สามารถ สร้างได้ใช่ไหมครับ (ไม่รู้ว่าเข้าใจถูกไหม)
เขาเรียกว่าอะไรครับ ถ้าบอก admin เซ็ทให้

tenzamak

อ้างถึงจาก: nulek101 ใน 21 มีนาคม 2010, 09:32:22
อ้างถึงจาก: tenzamak ใน 21 มีนาคม 2010, 09:21:15
จริงๆแล้ว ถ้าเป็น vps   api ไม่ต้องใช้นะครับ
ส่วนโฮสปกติ admin ไม่ยอมเซ็ตแน่ๆเลย

สรุปว่า ไม่สามารถ สร้างได้ใช่ไหมครับ (ไม่รู้ว่าเข้าใจถูกไหม)
เขาเรียกว่าอะไรครับ ถ้าบอก admin เซ็ทให้

กําหนดสิทธิ์ ให้ DB Name เข้าถึงได้ทุกๆ ฐานข้อมูล
ถ้าเป็น hosting ธรรมดา adminไม่ทําให้แน่นอนครับ เพราะมันเห็ฯทุก DB ในโฮส

g-ji

ปกติทำเหมือนจี้ป่าวหว่า

จี้เขียนสคริปท์ให้มันสร้างฐานข้อมูลขึ้นมา เยอะๆ


<?php
$max_dbs 
256;
$base_db_name 'wpmu_db';

$db_name     'wpmu';
$db_user     'root';
$db_password '';
$db_host     'localhost';

$table_prefix  'wp_';
//-Configuration-end------------------------------------------------------

$dbh = new PDO("mysql:host=$db_host;dbname=$db_name"$db_user$db_password);

// Create databases
for($i=0$i<$max_dbs$i++) {
$dbh->query('CREATE DATABASE IF NOT EXISTS '.$base_db_name.$i);
}

?>



ไม่แน่ใจว่าใช่ได้กับทุกโฮสป่าว แต่จริงๆ ไป copy มาจากเว็บไหนสักที่นี่แหละ เอามาแก้่นิดหน่อย

แล้วก็

ใช้สคริปท์ข้างล่าง เจน คำสั่ง เอาไว้ใช้ใน db_setting

<?php 
$shot 
's';
$dbhost 'localhost';
$dbuser 'root';
$dbpass '';
$dbcount '256';
$dbname 'wpmu_db';

for(
$i 0;$i $dbcount;$i++){

echo "add_db_server('$shot$i', 0, 'mysql', 1, 1, '$dbhost', '', '$dbname$i', '$dbuser', '$dbpass');\n";
 
 }
?>



ส่วนอันนี้โค้ด db_setting
http://g-ji.com/wp-content/uploads/2010/03/db-settings.php_.txt

ตรงจุดที่ให้ใส่ก็บอกไว้นะ เอาโค้ดที่เจนจากสคริปท์ (อันที่ 2) มันจะออกมาแบบเนี่ย ▼ ตามจำนวนฐานข้อมูลที่ใส่ไป
add_db_server('s0', 0, 'mysql', 1, 1, 'localhost', '', 'wpmu_db0', 'root', '');

เสร็จแล้วเลื่อนลงไปอีกหน่อย ตรง add_global_server ไม่ต้องไปยุ่งอะไร ลงไปอีก


$dbsnum=256; // << จำนวนฐานข้อมูลที่สร้างไว้
$blogs_per_db=4; // << จำนวนบล็อกต่อฐานข้อมูลนั้นๆ จากสคริปท์ตั้งไว้ 4 บล็อกต่อฐานข้อมูล

for($db_id=1; $db_id<=$dbsnum; $db_id++){
   $dataset = 's' . $db_id;
   $max = $db_id * $blogs_per_db + 1; // include
   $min = $max - $blogs_per_db + 1; // include
   for($blog_id=$min; $blog_id<=$max; $blog_id++){
       add_blog_tables($dataset, $blog_id);
   }


บล็อกที่ 2 เป็นต้นไป มันจะสร้างลงฐานข้อมูล ตามที่เซ็ทไว้ (จากสคริปท์ ฐานละ 4 บล็อก) ไล่ไปเรื่อยๆ  :P จนครบ 256 ฐาน (ตามโค้ดตัวอย่าง)

จากโค้ดตัวอย่างนี่ สร้างได้ 1024 บล็อก  :o

ทดสอบใน local host อย่างเดียว ใช้ได้ไม่มีบั๊ก  :-[

เอามาแปะ หาคนเทสในโฮสจริง ! ถ้ามันเวิร์ค หรือ ใช้ได้ เดี๋ยวหาคนช่วยพัฒนาต่อ ให้มันดูดีหน่อย มีหน้า install อินเตอร์เฟส สวยๆ ใช้ง่ายๆ แค่กรอกข้อมูล กด ok รอสคริปท์ทำงาน แล้วก็ ตู้มมม ออกมาเป็น โกโก้ครันช์

แก้ไข

ไฟล์ไม่ครบ

http://g-ji.com/wp-content/uploads/2010/03/share-db.zip

:P
หลักจากติดตั้ง wpmu เสร็จแล้่ว ย้ายไฟล์ ตามนี้
db.php >> wp-content
create_multidb.php >> root
create_multidb_config.php >> root
db-settings.php >> root

แก้ไข wp-config.php

เพิ่ม

define('WPMU', true);
require('db-settings.php');

ไว้บนสุด (ใน <?php)

***
แก้ไขไฟล์เพิ่มนิดหน่อย

โค้ดตัวอย่างที่ให้โหลดแบบ zip เซ็ทค่าไว้หมดแล้ว สร้างฐานข้อมูลเพิ่ม ก็พอ

ลองใช้ในเครื่องตัวเองดูก่อนแล้วค่อยไปลองบนโฮสจริง  :wanwan009: