2019年10月27日 星期日

Dump MySQL database and diff

加入--slip-out, 輸出為方便diff的格式

mysqldump --skip-opt -u $MY_USER -p$MY_PASS mydb1 > /tmp/dump1.sql
mysqldump --skip-opt -u $MY_USER -p$MY_PASS mydb2 > /tmp/dump2.sql

修復MySQL無法啟動的問題

在備用的server上發現MySQL無法啟動

從mysql error log (/var/log/mysql/mysql/error.log)
看起來有可能是資料毀損

補救方式:
1. 先使用recovery mode啟動:
    /etc/mysql/my.cnf裡面加入innodb_force_recovery = 1
2. 啟動MySQL:
    $ service mysql start
    如果還是啟動失敗就修改my.cnf的值, ex:
    innodb_force_recovery = 2, 再啟動看看
    依照毀損的嚴重程度最多加到6
3. Dump database的SQL
    mysqldump -u 'name' -p -A > dump.sql
4. 關閉MySQL:
    $ service mysql stop
5. 把舊的資料庫內容刪除(最好先備份)
    $ cd /var/lib/mysql
    $ rm ib*
    $ rm -rf [DATABASE_NAME]
6. 在my.cnf裡面將innodb_force_recovery = 1移除
    啟動MySQL
7. 將dump的資料庫寫回去:
    $ mysql -u 'name' -p < dump.sql
8. 寫入途中, 修正所有發生的error
9. service mysql restart
10. 啟動成功

不過要注意的時,修正途中可能造成資料遺失
必須看看怎麼補救

Ref:
https://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html

2019年10月1日 星期二

使用cURL取得Google搜尋結果

Google最簡單的搜尋Pattern:
比如說我想搜尋nintendo switch,
https://www.google.com/search?q=nintendo+switch

但如果直接使用curl:
curl "https://www.google.com/search?q=nintendo+switch"
會出現錯誤

需要加上User Agent, 如下:
curl -A 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0' "https://www.google.com/search?q=nintendo+switch"

就可以產生搜尋的結果了

Get and push AOSP projects to local Gerrit server

1. Get Git MIRROR from AOSP
$ mkdir aosp_mirror
$ repo init -u https://android.googlesource.com/platform/manifest --mirror
$ repo sync


2. Create a project as parent in Gerrit of all other AOSP projects
2.a. In Gerrit Web UI, Browse->Repositories-> Create New
2.b. Set "Only server as parent for other repositories" to true


3. Create groups to manage access of your project
3.a. Browse->Groups->Create New
3.b. Create 2 groups, android10-admin, android10-user


4. Add your group to access Android10 project
4.a. Browse->Repository->AOSP
4.b. Click access on left tab
4.c. Modify it as you want


5. Add projects to Gerrit
5.a. Add projects to Gerrit
$ repo forall -c 'echo $REPO_PROJECT; ssh -p 29418 admin@10.10.10.10 gerrit create-project --owner android10-admin Android10/$REPO_PROJECT;'

5.b. Add parent project of added projects
$ repo forall -c 'echo $REPO_PROJECT; ssh -p 29418 admin@10.10.10.10 gerrit set-project-parent --parent AOSP Android10/$REPO_PROJECT;'