2015年9月22日 星期二

WordPress Crash After Change IP Address

WordPress Crash After Change IP Address


簡述

一般不會有這樣的問題, 因為大部份正式的 WordPress 站台都會使用 domain name 來當站台的網址而不是使用 IP address。但對於使用 IP address 當網址的 WordPress 站台, 一旦 IP address 有所變動, 那 WordPress 站台鐵定掛點。
本文列出一些資料修正的方法, 主要是更改 WordPress 資料庫中網址的欄位, 讓 WordPress 站台能夠重新站起來。

處理步驟

Case 1: 單一獨立 WordPress 站台

1. 備份站台資料庫並登入 MySQL 準備修改內容:
$ sudo mysqldump -uUser -pPassword myWPDB > myWPDB.sql
$ mysql -uUser -pPassword
mysql> use myWPDB

2. 檢查目前的資料, 確認要如何修改:
mysql> SELECT * FROM wp_options WHERE option_name IN ('siteurl','home');
# 輸出結果類似以下內容
+-----------+-------------+---------------------+----------+
| option_id | option_name | option_value        | autoload |
+-----------+-------------+---------------------+----------+
|         2 | home        | http://1.123.111.55 | yes      |
|         1 | siteurl     | http://1.123.111.55 | yes      |
+-----------+-------------+---------------------+----------+
要把其中 IP address 的部份改為新的 IP address; 其他如 http:// 或是若有子目錄的部份全都要保留下來。

3. 確認好新的 option_value 後, 執行以下指令更改資料:
mysql> UPDATE wp_options SET option_value = '新值' WHERE option_name IN ('siteurl','home');

Case 2: WordPress MU 網誌網路

1. 先使用 Case 1 的方法更改所有子網誌的內容
子網誌資料表的名稱為 wp_x_options, 例如 wp_2_options, wp_3_options.

2. 檢查以下兩個網誌網路的資料表, 確認要如何修改:
mysql> SELECT * FROM wp_site;
mysql> SELECT * FROM wp_blogs;
3. 執行以下指令修改 IP 位址:
mysql> UPDATE wp_site SET domain = '新的網址';
mysql> UPDATE wp_blogs SET domain = '新的網址';
4. WordPress MU 的 wp-config.php 設定檔裡會多一個設定值要修改:
$ sudo vi wordpress-網頁根目錄/wp-config.php
修改以下定義
define('DOMAIN_CURRENT_SITE', '新的網址');
-- valid for WordPress 4.3.1

2015年9月20日 星期日

Replace MySQL with MariaDB Installation

Replace MySQL with MariaDB Installation

簡述

Since MariaDB trends to be the open source drop-in replacement of MySQL, I'd like to try and write down how to drop-in replace MySQL with MariaDB in Ubuntu 14.04. The versions involved are mysql-server-5.5 and mariadb-server-5.5.

執行步驟


1. Backup all databases and configuration files:

$ sudo cp /etc/mysql /etc/mysql_mysql
$ mysqldump -uUserID -pPassword myDatabase > myDatabase.sql;

2. Stop services:

$ sudo service nginx stop
$ sudo service apache2 stop
$ sudo service mysql stop

3. Uninstall MySQL Packages:

$ sudo apt-get purge mysql-server mysql-client mysql-common
$ sudo apt-get autoremove
$ sudo apt-get autoclean
Some messages output: mysql-client not installed, so not removed; /etc/mysql not empty, so not removed, that's OK, don't care about it.
One thing should be cared about is php5-mysql and relative configurations also removed. We have to add them back after MariaDB installed.

4. Install MariaDB:

$ sudo apt-get install mariadb-server
An interface displayed several times during installation asking new MariaDB root user's password, just hit Enter to keep it unchanged. The installation process basically merges old MySQL database without change it.
New configuration files will write to /etc/mysql folder.

5. Stop MariaDB to do some configurations:

$ sudo service mysql stop
$ sudo vi /etc/my.cnf   

# -------------------------
# add following section to my.cnf
[mariadb]
aria_pagecache_buffer_size = 1M  # minimized mem. usage, default: 128M
character-set-server = utf8mb4   # full UTF-8 characters support
collation-server     = utf8mb4_unicode_ci    
# -------------------------

$ sudo service mysql restart
$ sudo service apache2 restart
$ sudo service nginx restart

6. Solving php5-mysql issue:

Try to connect to your WordPress sites, an error message will show up:
Your PHP installation appears to be missing the MySQL extension which is required by WordPress.
Just install it and restart Apache, your WordPress will back to alive!
$ sudo apt-get install php5-mysql
$ sudo service apache2 restart
Now I could have my WordPress run on LNAMP (Ubuntu, Nginx, Apache, MariaDB, PHP) VM web server! :D.

Ubuntu ADSL Dial Up 撥接上網設定方法

Ubuntu ADSL Dial Up 撥接上網設定方法


簡述


設定方式:

$ sudo pppoeconf     # 執行撥接設定程式

其他相關指令:

$ pon dsl-provider     # 以設定檔 dsl-provider 進行連線
$ poff                 # 中斷連線
$ plog                 # 查看連現的 log
$ ifconfig ppp0        # 查看網路撥接連線狀態

2015年9月19日 星期六

Blogger Title SEO 搜尋最佳化

Blogger Title SEO 搜尋最佳化

簡述

Google 旗下產品 Blogger 的所有預設範本在設定 Title 時把 blog 的名稱放前面, post 的標題放後面有點讓人出乎意料。因為自家的搜尋引擎搜出來的標題結果常會顯示了完整的 blog 名稱卻讓 post title 截掉一大半, 也不利搜尋者判別該文章是不是自己想找的內容。
還好 Blogger 範本是可以 customized, 剛好 Blogger 本身又提供了控制 title 名稱的語法, 透過高人提供 Blogger Title SEO 搜尋最佳化的方法可將 Blogger 文章的標題重新改為文章標題在前, 其後再補部落格名稱。

修改方式

編輯目前使用的範本(Template) 選擇 Edit HTML, 找到這一行:
<title><data:blog.pageTitle/></title>
將它替換成以下的 script 後存檔離開:
<b:if cond='data:blog.pageType == "item"'>
  <title><data:blog.pageName/> - <data:blog.title/></title>
<b:else/>
  <title><data:blog.pageTitle/></title> 
</b:if>

參考資料:

Blogger Conditional Tag — b:if and b:else
9 Killer Blogspot SEO Tips For bloggers

2015年9月17日 星期四

vi vim Editor 常用指令

vi vim Editor 常用指令

本文所列為 Ubuntu 環境下 vi vim editor 常用指令, 輸入指令前要先按 ESC 回到指令模式。指令模式下按 ESC 仍為指令模式, 多按幾次無防!
gg            # 游標移至文首
G             # 游標移至文尾
/字串          # 搜尋字串
/             # 搜尋下一個
/字串 加 \c    # 搜尋字串不分大小寫, \c 加在搜尋字串開頭或結尾皆可

2015年9月16日 星期三

Upgrade MySQL Charset utf8 to utf8mb4

Upgrade MySQL Charset utf8 to utf8mb4

For UTF-8 encoding, MySQL originally use charset utf8 which is with maximum length of 3 bytes for every character to cover 65536 unicode characters; from version 5.5.3, MySQL implements a new charset utf8mb4 which is with maximu length of 4 bytes for every character to support full UTF-8 encoding unicode characters.

For a good multilingual support in modern international internet environment, it's better to upgrade MySQL charset utf8 to utf8mb4 from now on. Also it better to change the collation to utf8mb4_unicode_ci for more correct text sorting.

Upgrade MySQL Charset utf8 to utf8mb4:

Modify my.conf default setting
New database default charset and collation
Verify existed database structure and data upgrading

Cautions:

Use varchar instead of varcher for saving disk space
Index length field should be limited to 191 but not 255 chars
Alter char-related fields' length by 4/3 to prevent data trucation after upgrade

2015年9月14日 星期一

MySQL 常用 Command Line 指令

MySQL 常用 Command Line 指令

本文所列為在 Ubuntu 環境下一些 MySQL 常用 Command Line 指令, 包含 mysql 介面的指令如 help, show, ... 等等, 及標準的 SQL 語法如 create, select, update, delete, ... 等等。

順道一提 MariaDB 是 MySQL 非 Oracle 管轄的版本, 幾乎 100% 相容於 mysql (介面指令也用 mysql), 雖然底層有用到不同技術, 但應用層面上可完全將兩者都當做是 MySQL 來使用。

MySQL 介面指令說明, 指令後不可以加註解, 指令可不用加結尾分號

mysql> help  
mysql> help functions
mysql> help contents
mysql> help <content_category_item>
mysql> help <conntet_topic_of_category_item>
mysql> help '%search_string%'
基本上, 非執行 SQL 查詢的 MySQL 介面指令都不需要以分號結尾。

Basic Information

Starting point:
# schema
mysql> SHOW {DATABASES | SCHEMAS};
mysql> SELECT * FROM information_schema.SCHEMATA;
mysql> SHOW CREATE DATABASE myDbName;

# table
mysql> SHOW TABLES [{FROM | IN} myDbName];
mysql> SELECT * FROM information_schem.TABLES WHERE TABLE_SCHEMA = myDbNAME;
mysql> SHOW CREATE TABLE myDbName.myTblName;
mysql> DESC myDbName.myTblName;

# column
mysql> SHOW COLUMNS {FROM | IN} myTblName {FROM | IN} myDbName;
mysql> SHOW COLUMNS {FROM | IN} myDbName.myTblName;
mysql> SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = myDbName AND TABLE_NAME = myTblName;
mysql> DESC myDbName.myTblName myColName;
查詢資料庫預設 character set 及 collation
# schema
SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "schemaname";

# table 
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "schemaname" AND T.table_name = "tablename";

# column
SELECT character_set_name FROM information_schema.`COLUMNS` WHERE table_schema = "schemaname" AND table_name = "tablename" AND column_name = "columnname";

EXPLAIN, DESCRIBE, DESC, SHOW COLUMNS:

mysql> EXPLAIN myTable;                    # EXPLAIN = DESCRIBE = DESC
mysql> SHOW COLUMNS FROM myTable;
mysql> EXPLAIN myTable myField;
mysql> EXPLAIN myTable '%search_string%';

USE

USE 告知 client 端之後的 SQL 語法若未指定資料庫名稱,則都是針對所選定的資料庫進行的。
mysql> USE myDatabase

CREATE

CREATE DATABASE myDataBASE CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE TABLE myTableName (myField1Name myField1Type, myField2Name myField2Type);

# create table example
CREATE TABLE birds (
bird_id INT AUTO_INCREMENT PRIMARY KEY,
scientific_name VARCHAR(255) UNIQUE,
common_name VARCHAR(50),
family_id INT,
description TEXT
);

INSERT

INSERT INTO myTable VALUES(myField1Value, myField2Value, myField3Value);
INSERT INTO myTable VALUES(myRow1Fld1, myRow1Val1), (myRow2Fld1,myRow2Val1);

# insert data example
INSERT INTO birds (scientific_name, common_name)
VALUES ('Charadrius vociferus', 'Killdear'),
('Gavia immer', 'Great Northern Loon');

SELECT

SELECT * FROM myTable;
SELECT * FROM myTable\c               # 語尾加 \c, 放棄本次輸入的語法
SELECT * FROM myTable\G               # 語尾加 \G, 查詢結果逐欄列行顯示
SELECT * FROM myTable WHERE myField = myFieldValue;
SELECT myTbl1Fld, myTbl2Fld FROM myTbl1 JOIN myTbl2 WHERE myJoinFld1InTbl1 = myJoinFld1InTbl2;
SELECT myTbl1Fld, myTbl2Fld FROM myTbl1 JOIN myTbl2 WHERE myJoinFld1InTbl2 = myJoinFld1InTbl1;

UPDATE

UPDATE myTable SET myField = myNewValue WHERE myCondField = myCondValue;
UPDATE myTable SET mySet1, mySet2, mySetN WHERE myCondField = myCondValue;

DROP

DROP DATABASE myDatabase;

資料備份

$ mysqldump -uUserID -pPassword db_name > DB_BackupFileName.sql
$ mysqldump -uUserID -pPassword db_name table_name > Table_BackupFileName.sql

資料倒帶

小心使用, 會重建 table 並重填資料!
$ mysql -uUserID -pPassword db_name < DB_or_Table_BackupFileName.sql

複製 Table 及資料

CREATE TABLE table_new LIKE table_old;
INSERT INTO table_new SELECT * FROM table_old;
或
CREATE TABLE table_new SELECT * FROM table_old;

ALERT TABLE

ALERT TABLE table_name
DROP COLUMN column_name,
ADD COLUMN column_name column_type,
ADD COLUMN column_name column_type AFTER another_column_name,
CHANGE COLUMN column_name change_to_column_name change_to_column_type,
CHANGE COLUMN old_column_name new_column_name new_column_type DEFAULT defautl_value,
ALTER column_name SET DEFAULT default_value,
ALTER column_name DROP DEFAULT;

AUTO_INCREMENT

SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_NAME = myTableName;
ALTER TABLE myTableName AUTO_INCREMENT = new_value;

參考資料:

Learning MySQL and MariaDB, Russell J.T. Dyer, O'REILLY