顯示具有 mysql 標籤的文章。 顯示所有文章
顯示具有 mysql 標籤的文章。 顯示所有文章

2020年1月31日 星期五

變更 mysql 資料庫數據的路徑

在 mysql 裡,查看當前的儲存路徑:
mysql> show variables like 'datadir';
停止 mysql 服務
service mysql stop
建立新的儲存路徑:
mkdir -p /data/mysql
複製 mysql 原來的資料
cp -rp /var/lib/mysql/* /data/mysql
chown -R mysql.mysql /data/mysql
chmod -R 700 /data/mysql
修改 mysql 配置文件
nano /etc/mysql/mysql.conf.d/mysqld.cnf
修改
datadir = /var/lib/mysql
為
datadir = /data/mysql
啟動 mysql 服務
service mysql start

2020年1月7日 星期二

mysql 8 的 sql mode 查詢及設置

MYSQL 升級後, 出現了 Field 'XXX' doesn't have a default value。 是因為新版的 mysql 開啟了嚴格模式(STRICT_TRANS_TABLES),以下指令可以查詢並修改相關內容。

查詢 sql_mode
mysql> select @@GLOBAL.sql_mode;
+-------------------------------------------------------------------------------
| @@GLOBAL.sql_mode
+-------------------------------------------------------------------------------
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_
+-------------------------------------------------------------------------------
1 row in set (0.00 sec)
mysql> select @@SESSION.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@SESSION.sql_mode                                                                                                    |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

設置 sql_mode
mysql> set GLOBAL sql_mode='';
Query OK, 0 rows affected (0.00 sec)
mysql> set SESSION sql_mode='';
Query OK, 0 rows affected (0.00 sec)
在 ubuntu 的 mysql 8 , 可直接修改 mysql 設定檔
nano /etc/mysql/mysql.conf.d/mysqld.cnf
最後一行加入
sql_mode = '' 
即可

sql_mode常用值: 

ONLY_FULL_GROUP_BY:對於GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現,那麼這個SQL是不合法的,因為列不在GROUP BY從句中。

NO_AUTO_VALUE_ON_ZERO:該值影響自增長列的插入。插入設置下,插入0或NULL代表生成下一個自增長值。如果用戶希望插入的數值為0,而該列又是自增長的,那麼這個選項就有用了。

STRICT_TRANS_TABLES:在該模式下,如果一個值不能插入到一個事務表中,則中斷當前的操作,對非事務表不做限制

NO_ZERO_IN_DATE:在嚴格模式下,排除日期和月份為零

NO_ZERO_DATE:設置該值,mysql數據庫重複插入零日期,插入零日期會引發錯誤而不是警告。

ERROR_FOR_DIVISION_BY_ZERO:在INSERT或UPDATE過程中,如果數據被零除,則產生錯誤而不警告。如果未命名該模式,那麼數據被零除時MySQL返回NULL

NO_AUTO_CREATE_USER:禁止GRANT創建密碼為空的用戶

NO_ENGINE_SUBSTITUTION:如果需要的存儲引擎被替換或未編譯,則引發錯誤。不設置此值時,用替換的存儲引擎替代,並拋出一個異常

PIPES_AS_CONCAT:將“ ||”視為串行的連接操作符而非或運算符,這和Oracle數據庫是一樣的,也和串聯的拼接函數Concat相類似

ANSI_QUOTES:啟用ANSI_QUOTES後,不能用雙引號來引用字符串,因為它被解釋為識別符

2020年1月3日 星期五

修改phpmyadmin 默認超時,登錄超時(1440 秒未操作),請重新登錄

修改 phpmyadmin 設定檔 在 phpmyadmin的根目錄下有 config.inc.php 這個檔案,最上面加入一行,設定時間(秒數)即可。
$cfg['LoginCookieValidity'] = 86400;

2019年12月27日 星期五

ubuntu 19.1 安裝 mysql 8 服務

一如往常,先更新 apt-get
sudo apt-get update
安裝 MySQL 8.0
sudo apt-get install mysql-server
這邊使用 netstat 指令來查看, netstat 的功用是顯示通訊協定統計資料以及目前的TCP/IP 網路連線,所以要使用它來查看已安裝好的 MySQL 是否有連線監聽。此指令要另外安裝,安裝指令如下:
sudo apt-get install net-tools
安裝完成後就能透過 netstat 指令來查看 MySQL 是否安裝成功:
sudo netstat -tap | grep mysql
設置 MySQL 允許遠端訪問
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir  = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address  = 127.0.0.1 <== 註解起來
#
# * Fine Tuning
#
key_buffer_size  = 16M
# max_allowed_packet = 64M
# thread_stack  = 256K
進入 MySQL 服務,一開始密碼為空值
mysql -u root -p
CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';

CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

FLUSH PRIVILEGES;
其他相關

ubuntu mysql 8 的資料庫預設路徑為 /var/lib/mysql
若變更或掛載了新路徑, 記得要改權限
chmod -R 700 /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
查詢mysql資料庫檔案的存放位置
在mysql資料庫中,有時候並不是很容易找出mysql資料庫檔案data的存放位置,這時就可以使用mysql的命令列工具進行查詢.
show variables like '%datadir%';

2019年12月24日 星期二

Ubuntu19.1 安裝 LEMP(Linux+Nginx+PHP)環境建立


Step 1 : 安裝 Nginx Web Server

sudo apt-get update

sudo apt-get install nginx

在瀏覽器輸入 http://server_ip 出現下圖,即表示安裝成功

Step 2 : 安裝php及設定php.ini
sudo apt install php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-gd php8.1-curl

2. 修改php.ini (Modifying php.ini file) :
sudo nano /etc/php/8.1/fpm/php.ini

找到
;cgi.fix_pathinfo=1
改成
cgi.fix_pathinfo=0

存檔並重啟 php 服務
sudo service php8.1-fpm restart

然後要設定讓nginx能夠執行PHP腳本 輸入以下指令修改nginx設定
sudo nano /etc/nginx/sites-available/default

我們將其改成如下 (紅色表示變動部分)
server {
    listen 80 default_server;
    listen [::]:80 default_server;
 
    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;
 
    server_name _;
 
    location / {
        try_files $uri $uri/ =404;
    }
 
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
    }
 
    location ~ /\.ht {
        deny all;
    }
}

修改完後儲存 並輸入以下指令檢查設定檔格式是否沒有錯誤
sudo nginx -t

檢查沒有錯誤就輸入指令重新載入nginx設定
sudo systemctl reload nginx