Posts

Showing posts with the label MySQL

Google Cloud SQL 升級到 MySQL 8 遇到的權限問題

Image
 Google Cloud SQL 提供資料庫升級的方式很方便 幾乎是一鍵完成升級 這邊是從 5.7 升級到 8.0 在備份前先手動備份以外 另外還建立了一個副本 以確保在升級後有問題可迅速切回舊的資料庫 升級後發現有幾個資料庫使用者的權限有問題 在 phpMyAdmin 上面重新設定後也是一樣 phpMyAdmin 5.2.0 & 5.2.1 上設定 MySQL 8 的權限有點問題 由於 MySQL 8 上做了個修改 如果需要給予該使用者該資料庫 GRANT 的權限 需要在 GRANT 後面加上 WITH GRANT OPTION 指令 否則該使用者會無法存取該資料庫 基本上我是無法直接在 phpMyAdmin 上用點選的方式完成設定 正常權限的畫面 如果用 phpMyAdmin 勾選上方 Check all Administration 下的 GRANT 不會被勾選 即使手動勾選 GRANT 儲存後也是空的 可以使用以下指令修改完貼到 phpMyAdmin 上執行 CREATE USER ' db_user '@ '%' IDENTIFIED WITH mysql_native_password BY 'password' ; GRANT ALL PRIVILEGES ON your_database.* TO 'db_user' @ '%' WITH GRANT OPTION ; FLUSH PRIVILEGES; 測試環境 - Google Cloud SQL MySQL 8.0.26(測試過 MySQL 8.0.31 也是如此) - phpMyAdmin 5.2.0 & 5.2.1

如何在 Google Cloud SQL 匯出 binlog

Image
  # mysqlbinlog --base64-output=AUTO --verbose -R -h [CLOUD SQL IP] -u root -p mysql-bin.000199 > /tmp/binlog-dump-000199.sql MySQL 5.6 開始支援 GTID 需要搭配上面的參數才能將 binlog 解析出 SQL 參考來源: Show sql statements from mysql binlog (GTID)

mysql 5.5 unknown variable 'master-host=192.168.100.1'

昨天將 Master 升級後 今天 MySQL Slave 也從 mysql 5.1 升級到 mariadb 5.5.29 mariadb 5.5 綜合了 mysql 5.5 及 5.6 的功能 先確定 Master 有開啟 log-bin 功能後 備份一份要同步的資料庫到 slave 去 由於 mysql 5.5 開始不支援 my.cnf 裡 master-host 等的設定 所以不能把 master 的參數設定到裡頭 只能透過 sql 指令的方式建立 replication 連結 不然會看到下面錯誤訊息 Installing MariaDB/MySQL system tables in '/home/mysql/data' ... 130208  7:08:31 [ERROR] /usr/local/mysql/bin/mysqld: unknown variable 'master-host=192.168.100.1' 130208  7:08:31 [ERROR] Aborting 以下是針對 slave 的操作步驟: install mysql start mysql restore db SQL : slave stop SQL : change master to master_host='192.168.100.1', master_port=3306, master_user='repl', master_password='xxxxxxx'; SQL : slave start Reference : mysql主从配置(freebsd+mysql5.5.13) mysql关于log_bin相关命令

mysql function 中文輸出亂碼

從 mysql 5.1.56 升級到 mariadb 5.5.29 升級完發現手機上某個使用 function 的欄位都是問號 想說改看看 mysql encoding 就正常了 不過改了之後還是一樣 ._. 想說會不會針對 function 的新功能 但怎麼都找不到相關資訊 後來發現原本問題出在 function 的 definer 由於我升級沒有把權限的部份一併帶過去 由於帳號不多而且備份還原權限很麻煩 所以就自己把權限的部份還原 剛好那個 function 的 definer 不在權限列表中 就出現了中文變 ????? 的問題 PS. 如果還是一樣,把 Deterministic 改成 not 看看 僅供參考~

升級 mysql 5.1 to 5.5 後遇到的問題

Image
從原本的 mysql 5.1.56 升級到 mariadb 5.5.28a 除了匯出時有個 db 的 views 有問題以外,其他都一切正常 轉換到新的資料庫後重新編譯 php, 重開 apache 後就可正常連線了 不過 function 的部份似乎出了點問題 原本想要開啟 navicat 將 function 重匯 不過卻出現下面的錯誤 1548 - Cannot load from mysql.proc. The Table is probably corrupted 上網查了一下解決方式蠻簡單的 只要下指令修復即可 /usr/local/mysql/bin/mysql_upgrade -u root -p 升級過程: dump all databases /usr/local/mysql/bin/mysqldump -u root -p --all-databases > /home/all.sql backup user privileges shutdown mysql, change my.ini settings start mysql restore all databases /usr/local/mysql/bin/mysql -u root -p --socket=/tmp/mysql.sock < /home/all.sql restore user privileges stop apache recompile php start apache 環境: CentOS x86_64 5.8 Apache 2.2.22 / PHP 5.3.19 Reference: Fix: Cannot load from mysql.proc. The table is probably corrupted

DSN : invalid attribute string

MySQL ODBC 一路用起來都沒發現過什麼問題 但昨天想說把 server 上的 myodbc 升級到 5.1.7 的版本 就是得猴的開始了… 原本版本是 3.51 都好好得 但原本用的 G6 FTP 昨天發現在得猴 剛開完機都還可以連 但過一下他就給我葛屁了 由於是設定 dsn 連線 追回去 dsn 那邊就掛了 會出現 invalid attribute string 的字樣 反覆移除了好幾次的 myodbc 後來終於試出來了… 可能是使用 windows server 2003 比較舊的作業系統的關係 把他還原成 3.51.12 就正常了(移掉鬼 5.1.7 版)

PHP4 上安裝 freetds

Image
FreeTDS 是用來在 Unix-like 下連結 SQL SERVER 用的 先安裝 unixODBC-devel 套件 # yum install unixODBC-devel 再來編譯 FreeTDS # ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --with-unixodbc=/usr touch 這兩個檔案讓 php compile 過 # touch /usr/local/freetds/include/tds.h # touch /usr/local/freetds/lib/libtds.a 加入以下參數重新編譯 --with-unixODBC \ --with-mssql=/usr/local/freetds \ 編譯完重新啟動 apache 即可 可檢查 phpinfo() 中是否有 mssql 支援 為什麼要 tocuh 咧 可參考這邊 http://www.freetds.org/news.html 另外再補充一下 php 連結 SQL SERVER 如果遇到亂碼的話 請在 freetds.conf 設定(2010-07-27 修正) [ Somewhere ] host = 111.222.121.212 port = 1433 client charset = UTF-8 tds version = 8.0 如果 MySQL 亂碼請用 set names 'utf-8' 囉~

MySQL GROUP BY + ORDER BY -> Sorting 失效

以前都是用 MyISAM Engine 常搭配 GROUP BY 、 HAVING 撰寫 SQL 不過一直沒遇過這個問題 現在的資料庫 Engine 都是用 InnoDB 比較多 熊熊遇到 GROUP BY + ORDER BY Sorting 失效的問題 查了一下 MySQL 5.0 Certification Study Guide ,在 9.5.1 GROUP BY and Sorting 這節看到: For database engines other than MySQL, GROUP BY might not sort rows. 後來複製了一樣的 schema 跟 data 到一個新建的 table MySQL Engine 改用 MyISAM 測試 結果也是一樣的 剛剛想到 phpMyAdmin 的 Operations 中有個 Alter table order by 的功能 趕緊測試了一下,果然可以! :D 我的資料庫結構大致如下: no, int(10), UNSIGNED page_id, varchar(50) revision, int(10), UNSIGNED no, Primary Key page_id, INDEX Key page_id & revision, UNIQUE Key 原本用 SELECT * FROM `table` GROUP BY page_id ORDER BY revision DESC 出來的 revision 順序為 1、2 由於不方便使用 Distinct 後來加入 ALTER TABLE `test` ORDER BY `revision` DESC revision 順序就變 2、1 了! 測試環境: FreeBSD 6.2-Release MySQL 5.0.27 (utf8_general_ci) 2008-01-03 PM 03:43 補充: 剛經測試,上面的 Alter table order by 方法只適合用於 MyISAM 格式 InnoDB 格式不適用.... ooxx 如有後續再陸續補上~ 2008-01-04 PM 07:15 補充: 可以用 GROUP BY page_id DESC ORDER BY revision 的方式來替代 不過我始...

限制 MySQL 僅接受 localhost 連接

在預設的情況下, MySQL 允許外面的連線 這邊指的不是 MySQL 本身帳號權限的 Host 設定 而是限定本身 MySQL 的連線能力 可用以下指令查出 MySQL 預設 port 3306 的連線: # netstat -an | grep 3306 tcp4 0 0 *.3306 *.* LISTEN 如果要設定 MySQL 本身僅接受 localhost 連線,則開啟 /etc/rc.conf: mysql_enable ="YES" mysql_args ="--bind-address=127.0.0.1" 然後在重新啟動 MySQL 即可: # /usr/local/etc/rc.d/mysql-server.sh restart 再執行第一個指令檢查設定是否成功: # netstat -an | grep 3306 tcp4 0 0 127.0.0.1.3306 *.* LISTEN 這邊順邊提供設定 FULL-TEXT (全文搜尋)預設值 4 的更改方式 (字元 4 以下則不搜尋) MySQL 版本須大於 4.0 設定才有用 如果你想將他設定為 2 以下才不搜尋 [mysqld] ft_min_word_len =2 [myisamchk] ft_min_word_len =2 相對的有最小也有最大 最大的長度限制是依版本限制的(version-dependent) 以我用的 MySQL 5.0.45 community (Win32) 來說 ft_max_word_len 為 84 參考資料: 01 - 限制 MySQL 只接受 localhost 連線 02 - FNP:資料庫 - MySQL server set-up 03 - 8.4.1. myisamchk General Options 2008-07-07 補充: 感謝小欣的測試,mysql_args 裡面少加一個參數 原來是 mysql_args ="-bind-address=127.0.0.1" 應該是 mysql_a...