enter3017sky / mentor-program-2nd-blog

MTR02 學習紀錄
1 stars 2 forks source link

[筆記]部署 AWS EC2 虛擬主機 + Ubuntu LAMP 環境 + phpmyadmin #31

Open enter3017sky opened 5 years ago

enter3017sky commented 5 years ago

部署 AWS EC2 虛擬主機 + Ubuntu LAMP 環境 + phpmyadmin

主要參考這兩個同學的筆記 一小時完成 VPS (Virtual Private Server) 部署 部署 AWS EC2 遠端主機 + Ubuntu LAMP 環境 + phpmyadmin

AWS EC2 跟 ubuntu 環境都建立好了之後。

在 CLI 登入雲端虛擬主機

image

MySQL 設定時區

參考資料:修改 MySQL 時區

在 CLI 操作 MySQL

在 MySQL 的 CLI 上使用

  1. 資料庫基本操作

    • 建立資料庫:create database your_database_name;
    • 顯示所有資料庫:show databases;
    • 刪除資料庫:drop database your_database_name;
    • 使用/選擇資料庫:use your_database_name;
  2. 選擇資料庫 USE your_database 之後。

    • 顯示資料表:show tables
    • 列出資料表欄位資訊: describe your_table_name
  3. 就可以操作 CRUD 相關指令

用 FileZilla 連接 EC2

  1. 打開 FileZilla 的"編輯" -> "設置" 對話框,在左邊的“選擇頁面” 選擇“SFTP”, 右邊點擊“添加密鑰文件...” 按鈕,導入Amazon給的密鑰文件。
  2. 打開“文件”-> “站點管理器” , 點擊左邊的“新站點”按鈕, 在右邊“常規”標籤中填入主機信息(即AWS Console中 的 Public DNS)

    • "協議"中選"SFTP - SSH FileTransfer Protocol" ,
    • “登錄類型” 選“交互式”
    • “用戶” 中輸入用戶名(注意不能用默認的匿名用戶)
  3. 點“連接”。完成。

參考資料:用 FileZilla 連接 EC2

AWS EC2 設置固定IP地址

參考資料: (AWS EC2) Service for EC2 指定固定IP及釋放IP Amazon EC2防止被扣费的方法

使用 SSH 設定檔簡化指令與連線網址:

指令列都要打長長的一串,ip 還可能忘記,所以想到用別名的方式去改善

  1. 首先,在 ~/.ssh 下新增 config 檔案
    • 在 CLI 輸入 vim ~/.ssh/config
    • info: ~/ : 用戶根目錄。ex./Users/enter3017sky
  1. 設定 ssh config image

  2. 開始使用 alias 連線

參考資料:

ssh_config(5):OpenSSH SSH客戶端配置文件 - Linux手冊頁 增進 SSH 使用效率 - ssh_config Using an SSH Config File - Media Temple 使用 SSH config 文件


故障排除

Ubuntu 下 phpMyAdmin 的 404 Not Found 頁面

  1. 方法1:(我用這個解決的)

  2. 方法2:

    # link configure file to apache
    $ sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf
    # restart apache
    $ sudo /etc/init.d/apache2 restart
  3. 方法3: 關於phpmyadmin的問題

    • 重新設定你的「phpmyadmin」: sudo dpkg-reconfigure phpmyadmin

參考資料: 解決 Ubuntu 下 phpMyAdmin 的 404 Not Found 頁面 - kuoe0's dots 鏈結檔案 ln 指令


phpmyadmin 一直出現錯誤訊息

參考資料:

大家來學VIM(一個歷久彌新的編輯器)[六] 阿旺的 Linux 開竅手冊 Linux常用指令整理

設定留言參考資料: How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 18.04 45 How To Install and Secure phpMyAdmin on Ubuntu 18.04 How to Install a LAMP Stack on Ubuntu 18.04 How to setup Linux, Apache, MySQL, PHP (LAMP) Stack on Ubuntu 16.04 ubuntu 默認防火牆安裝、啟用、查看狀態ufw

enter3017sky commented 5 years ago

錯誤訊息:ERROR 1364 (HY000): Field 'xxx' doesn't have a default value

  1. 初次排除:雲端虛擬主機部署完成之後,首先當然是放些東西確認看看。後來發現留言板編輯、刪除、更新都正常。但是新增留言就是 sql fail,最後在 add_comments.php 裡面用 var_dump($variable)印出有嫌疑的變數,發現 if($stmt->execute()) 的結果是 false,然後最後 $conn->error 印出 _General error: 1364 Field 'userID' doesn't have a default value,發現 user_id 沒有用到,phpmyadmin 裡面與沒有設定預設值,但這個也蠻奇怪的,在自己的伺服器跟mentor 的伺服器都沒遇到,或許有設定配置的問題。最後在 phpmyadmin 直接設定預測值為 null,就正常運作了。

  2. 第二次解決:後來在 CLI 練習指令的時候,又發現了這個問題 insert into時,如果某個值沒放輸入又沒預設值,就會跳 ERROR。然後找到了,原來 sql_mode 是嚴格模式的關係。

取消 mysql 的 strict mode 模式:

  1. SSH 連線到伺服器的 root,輸入sudo vim /etc/mysql/conf.d/disable_strict_mode.cnf,以新增並建立一個 disable_strict_mode.cnf 檔案,

  2. 輸入

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  1. 輸入指令重新啟用 mysql :sudo service mysql restart

為了確認strict mode模式是不是已經被關閉了,可以在 phpMyAdmin 的 sql 中輸入 SELECT @@GLOBAL.sql_mode 進行測試 如果顯示 IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FO 則表示 strict mode 模式已經被關閉。

參考資料:關閉Ubuntu預設mysql5.7版的strict mode設定方法(嚴格模式)

enter3017sky commented 5 years ago

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

enter3017sky commented 5 years ago

再次相遇 ERROR 2002 (HY000)

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

1.

2.

### note
[mysqld]
# 會出現錯誤
# bind-address = ec2_public_IP

# 最後註解下行就解決了 ERROR 2002
# socket=/var/lib/mysql/mysql.sock

參考資料

用以下的方式啟動、停止、重啟 ubuntu mysql 會完整的訊息。

/etc/init.d/mysqld start
/etc/init.d/mysqld stop
/etc/init.d/mysqld restart
# or
/etc/init.d/mysql start
/etc/init.d/mysql stop
/etc/init.d/mysql restart
# 像這樣
[ ok ] Starting mysql (via systemctl): mysql.service.
[ ok ] Stopping mysql (via systemctl): mysql.service.
[ ok ] Restarting mysql (via systemctl): mysql.service.

參考資料:


更改 ubuntu 系統時間、 mysql error.log 時間


查看 log 的方式