# AWS EC2 遇到的問題 以下內容內我嘗試將databases 部署到AWS EC2上時,所遇到的問題,希望可以幫助到遇到同樣問題的人 ## aws ec2 無法安裝 mysql-server 問題原因 解決方法: 1. 使用Amazon RDS (沒有嘗試) 考慮使用Amazon Relational Database Service (RDS) 來部署MySQL數據庫。Amazon RDS是一個管理型數據庫服務,可以讓您設置、操作和擴展關係型數據庫,而不需要管理底層的硬件。RDS提供了易於使用、靈活性、可擴展性和安全性。 2. 安裝MariaDB (使用此方法解決) MariaDB是MySQL的一個流行分支,與MySQL高度兼容。您可以考慮在EC2實例上安裝MariaDB作為MySQL的替代品。在Amazon Linux或CentOS上,您可以使用以下命令來安裝MariaDB: ```bash= sudo yum install mariadb-server sudo systemctl start mariadb sudo mysql_secure_installation sudo systemctl enable mariadb ``` 3. 手動安裝MySQL(沒有嘗試) 您可以從MySQL的官方網站下載RPM包來手動安裝MySQL。首先,訪問 MySQL Downloads 頁面,選擇適合您的EC2實例操作系統的MySQL版本。 下載後,使用 rpm 命令來安裝下載的包。例如: ```bash= rpm -ivh mysql-community-server-版本號.rpm ``` 4. 使用第三方存儲庫 對於某些Linux發行版,您可能需要添加第三方存儲庫來安裝MySQL。例如,對於Amazon Linux 2,您可以使用以下命令來安裝MySQL: ```bash= sudo amazon-linux-extras install mysql5.7 或者 sudo amazon-linux-extras install mysql8.0 ``` ## 1. 本地端workbench 無法連接到資料庫 完成EC2安全組配置後,使用workbench 仍無法連接雲端ec2上的資料庫 ### 問題原因 : 可能是沒有配置用戶允許從本地端的ip 進行連接 ### 解決方法 : 配置MySQL用戶以允許遠程連接 您需要確保在MySQL中有一個用戶配置為允許從您的本地IP地址進行連接。這可以通過以下MySQL命令來實現: ```sql= CREATE USER 'username'@'your_ip_address' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'username'@'your_ip_address' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` 將 'username'、'your_ip_address' 和 'password' 替換成實際的用戶名、您的公網IP地址和期望的密碼。 ## 2. 傳輸檔案超過數據大小限制 當將資料存入databases 時出現以下的錯誤訊息 `Error: Got a packet bigger than 'max_allowed_packet' bytes` ### 問題原因 : 傳輸的檔案大小太大,超過了預設的最大數據包限制 ### 解決方法 : max_allowed_packet 是 MySQL 伺服器的一個配置參數,用於控制客戶端和伺服器之間傳輸數據包的最大大小。當數據包大小超過這個值時,伺服器將拒絕這個包並返回錯誤。 可以透過以下幾種方法嘗試 您遇到的錯誤信息 `"ER_NET_PACKET_TOO_LARGE"` 表示您試圖發送給 MySQL 伺服器的數據包超出了它的 `max_allowed_packet` 設置的限制。這通常發生在嘗試插入或更新大量數據時。 `max_allowed_packet` 是 MySQL 伺服器的一個配置參數,用於控制客戶端和伺服器之間傳輸數據包的最大大小。當數據包大小超過這個值時,伺服器將拒絕這個包並返回錯誤。 要解決這個問題,您可以嘗試以下幾種方法: #### 1. 增加 `max_allowed_packet` 的值 (使用此方法解決) 您可以在 MySQL 伺服器的配置文件中增加 `max_allowed_packet` 的值。這個文件通常是 `my.cnf` 或 `my.ini`。 - 打開 MySQL 伺服器的配置文件。 - 在 `[mysqld]` 部分下,增加或修改 `max_allowed_packet` 的值。例如: ``` [mysqld] max_allowed_packet=64M ``` - 重啟 MySQL 伺服器以使更改生效。 **修改前** >  **修改後** > #### 2. 減少數據包的大小 (未嘗試) 如果您無法更改伺服器的配置(例如,在共享主機上),您可能需要減少您的數據包的大小。這可能意味著插入更少的數據,或將一個大操作分解成多個小操作。 #### 3. 檢查您的查詢 (未嘗試) 有時候,錯誤可能是由於某些特定的查詢造成的。檢查您的查詢,確保它們是高效且合理的。特別是,如果您正在嘗試插入大量的文本或二進制數據,請考慮是否可以通過其他方式處理。 ## 3. 存儲到table裡的中文字變成??? 以下schema 在本地端進行儲存修改,中文字串都可以正常顯示 ```sql= CREATE TABLE Constituencies ( constituency_id INT AUTO_INCREMENT PRIMARY KEY, county VARCHAR(50), constituency_number INT, geometry GEOMETRY ); ``` 但在aws ec2 上使用mariadb 卻發生中文字串儲存後都會顯示??? 的問題 ### 問題原因 : mysql 的字串編碼錯誤導致 ### 解決方法 : 詢問chatgpt 後嘗試以下步驟修改 #### 1. 檢查和設置數據庫字符集 檢查您的數據庫和表當前使用的字符集,然後如有必要,將其更改為utf8mb4。這可以通過以下MySQL命令完成: ```mysql= -- 檢查當前數據庫的字符集 SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "your-database-name"; -- 更改數據庫字符集為utf8mb4 ALTER DATABASE `your-database-name` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; ``` **修改前後對照** > 同樣地,對於數據表: ```sql= -- 檢查表的字符集 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 = "your-database-name" AND T.table_name = "your-table-name"; -- 更改表的字符集 ALTER TABLE `your-table-name` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 2. 設置MySQL服務器和客戶端的字符集 確保您的MySQL服務器和客戶端連接使用utf8mb4。您可以在MySQL的配置文件(my.cnf或my.ini,通常位於/etc/mysql/)中設置這些: ```bash= [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci ``` :::danger 經過以上嘗試仍無效 ::: #### 3. 設置字符集 為了支持中文字符,確保您的表和數據庫使用 utf8mb4 字符集。您可以在創建表時指定字符集: ```sql= CREATE TABLE Constituencies ( constituency_id INT AUTO_INCREMENT PRIMARY KEY, county VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, constituency_number INT, geometry GEOMETRY ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` :::success 重新設定schema 成功顯示中文字串 :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up