1

วิธีแก้เวลา MySQL replication ค้าง

อันนี้จริง ๆ ออกแนวจดไว้ดูเองนะครับ แต่ถ้ามีประโยชน์กับท่านอื่น ๆ ก็ดี ผมมีปัญหาคือ master และ slave มันไม่ sync กัน พอดูใน slave แล้วมี row ที่ insert ไม่เข้า และ row นั้นใน master ก็ไม่มีแล้ว ผมใช้วิธี dump database จาก master มาใส่ที่ slave ก็ยังใช้ไม่ได้ หลังจากปรึกษามิตรสหายและเว็บต่าง ๆ แล้ว ต้องใช้ท่าเพิ่มเติมคือ

stop slave;

CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000xxxx’, MASTER_LOG_POS=xxxx, MASTER_USER=’xxxxxxx’, MASTER_PASSWORD=’xxxxxx’;

start slave;

( พวก xxx ก็เปลี่ยนกันเอานะครับ )

จากนั้นค่อย dump db จาก master มาใส่ใหม่ เท่านี้ก็ใช้ได้แล้ว

ส่วนเลข MASTER_LOG_POS และ MASTER_LOG_FILE ดูมากจากเครื่อง master ด้วยคำสั่ง show master status; ครับ ขอบคุณคุณ @plutonix ที่ถามมา

พี่ต้นกำธรแจ้งว่าบอกให้มัน skip ได้ด้วย http://www.ducea.com/2008/02/13/mysql-skip-duplicate-replication-errors/

อ่านเพิ่ม (จาก @plutonix)

0

ลง pdo_mysql บน Mac OS X 10.7.5 ปน ๆ กับ Macports

ผมลง PHP 5.4 กับ Apache ผ่าน Macports แต่ว่า pdo_mysql ใน Macports ไม่มีมั้ง ก็เลยลง pear เอง แล้วก็จะลง pdo_mysql จากผ่าน pecl ลองลงแบบท่าปกติแล้วมันเจ๊ง ปัญหาส่วนมากเพราะหา mysql5 ที่ใน Macports นี่ path มันก็จะแปลก ๆ หน่อย

ปัญหาแรกคือหา mysql_config5 ไม่เจอ  ผมก็จัดแบบนี้เลย

PDO_MYSQL_CONFIG=/opt/local/bin/mysql_config5 /Users/user_name/pear/bin/pecl install pdo_mysql

อันนี้ก็เสร็จไปด่านหนึ่งแต่ว่า เวลามาเรียกก็ยังเจ๊งอยู่ดีขึ้น file not found อะไรสักอย่าง เพราะหา file ที่แทน socket ไม่เจอ อันนี้ก็เข้าไปแก้ใน /opt/local/etc/php54/php.ini เพิ่ม

pdo_mysql.default_socket=/opt/local/var/run/mysql5/mysqld.sock

เข้าไป ก็เป็นอันใช้ได้

0

ลง mysql บน macports แบบมั่วๆ

ผมลงแล้วเจ๊งอยู่หลายรอบ ท่านี้อาจจะไม่่ค่อยดีแต่ก็ใช้ได้แล้ว

sudo port install mysql5
sudo port install mysql5-server

sudo mysql_install_db5
chown -R _mysql:_mysql /opt/local/var/db
chown -R _mysql:_mysql /opt/local/var/run
chown -R _mysql:_mysql /opt/local/var/log

sudo -u _mysql /opt/local/libexec/mysqld –skip-grant-table &

mysql -uroot

ใน mysql client สั่ง
use mysql;
update user set password=PASSWORD(‘password ที่จะตั้ง’) where user=’root’;
flush privileges;

(ออกจาก client)

kill mysqld ทิ้งซะ

สั่ง sudo port load mysql5-server

เสร็จแล้ว

0

แก้ mysql ให้ใช้ UTF-8 ใน my.ini/my.cnf

ผมก็เอามาแปะเลยแล้วกันนะ

[client]
default-character-set=utf8

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
collation_server=utf8_unicode_ci
character_set_server=utf8
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

ผมเพิ่มบรรทัดที่มี utf8 เข้าไป

0

MySQL: insert ถ้ายังไม่มี

ปกติใน MySQL (DBMS อื่นๆ ก็คงเหมือนกัน) ถ้าเราไป insert อะไรซ้ำๆ เข้าไปใน column ที่บังคับไว้ว่าต้อง unique มันก็จะเจ๊ง ก็เลยต้องมาดูก่อนว่ามีข้อมูลแล้วหรือยัง ค่อย insert แต่ว่าจะเขียน SQL อย่างไรให้สั้นๆ ง่ายๆ เท่าที่อ่านมาจาก http://bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html ผ่านทาง http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql มาอีกที

ผมเลือกใช้ “on duplicate key update” เพิ่มใน insert เพราะเท่าที่อ่านมา 3 วิธีก็ วิธ๊นี้ก็ดูประหยัด และไม่ไปเพิกเฉยต่อ error อื่น ที่ไม่เกี่ยวข้อง

สมมุติว่าผมจะเพิ่ม 6 เข้าไปใน textunit_conflicts.textunit_id ก็เขียนแบบนี้

insert into textunit_conflicts value (6) on duplicate key update textunit_id = textunit_id;

textunit_id = textunit_id ก็เขียนไปไม่ให้มันผิด syntax เฉยๆ

0

AuthKit + OpenID + MysqlStore

In previous examples, I always use file store, which I found that it is quite difficult to use when I deploy BasaAsa to the server so I change to use MySQL store. To use MySQL store, I modified websetup.py in order to create table for OpenID library.

websetup.py:

"""Setup the basaasa application"""
import logging

from basaasa.config.environment import load_environment
from basaasa.users.authkit_elixir_driver import UsersFromDatabase
from basaasa import model
from authkit.authenticate.open_id import make_store #added
from pylons import config #added

log = logging.getLogger(__name__)

def setup_app(command, conf, vars):
    """Place any commands to setup basaasa here"""
    load_environment(conf.global_conf, conf.local_conf)
    from elixir import metadata
    metadata.create_all(checkfirst=True)
    store_type = config.get('authkit.openid.store.type') #added
    stote_config = config.get('authkit.openid.store.config') #added
    conn, cstore = make_store(store_type, stote_config) #added
    if store_type == 'mysql': #added
        cstore.createTables() #added

Then after I run paster setup-app development.ini, tables for storing OpenID information have been created.