發表文章

目前顯示的是有「MySQL」標籤的文章

[MySQL] slave和master不同步的解決方法

今天發現MySQL的SLAVE資料庫沒有和MASTER同步,記錄下如何檢查和解決方式 注意: 以下方法將會重置mysql的複製,bin-log將會被刪除,如果要使用,可以先備份bin-log 如何檢查 1.進到SLAVE資料庫,下命令查看同步狀態 mysql >  show slave status\G 會發現 Slave_IO_Running: Yes Slave_SQL_Running: No 可以確認SLAVE是不同步的狀態 如何解決 重新做slave,使資料庫和master完全同步 在Master server的設置: 1.先進入master資料庫,進行鎖表,防止資料寫入 mysql > FLUSH TABLES WITH READ LOCK ; 2.進行數據備份 #mysqldump -uroot -p -hlocalhost > mysql.bak.sql 此命令為把資料備份到mysql.bak.sql上 3.備份後把表解鎖 mysql > UNLOCK TABLES ; 4.把mysql備份文件傳到slave機器,進行數據恢復 使用scp命令,此命令是丟到slave上的/tmp資料夾裡 # scp mysql.bak.sql root@{ip}:/tmp/ 在slave server的設置: 1.停止slave的狀態 mysql > STOP SLAVE; 2.導入數據備份 mysql > source /tmp/mysql.bak.sql 3.重新設置slave服務器 mysql > RESET SLAVE ; mysql > CHANGE MASTER TO MASTER_LOG_FILE = 'mysql-bin.000001' , MASTER_LOG_POS = 1 ; 4.開始slave mysql > START SLAVE; 5.查看同步狀態 mysql> show slave status\G 查看: Slave_IO_Running: Yes Slave_SQL_Running: Yes 完成同步 參考來源: https://www.h...

[MYSQL] 如何壓縮、清除 MSQL BIN LOG

圖片
server使用mysql長時間下來bin log會過於肥大,今天記錄下如何壓縮、刪除mysql bin log 操作步驟: 壓縮mysql bin log 進入mysql 下指令清除bin log 1、壓縮mysql bin log  寫了一個簡單的腳本,方便壓縮bin log #!/bin/bash echo -n "壓縮mysql-binary 從幾開始" read startnum echo -n "到幾結束" read endnum index=0 while [ $startnum -le $endnum ] do         file="/var/lib/mysql/mysql-bin.0$startnum"         echo -n "$startnum"         if [ -f $file ]         then                # bin log存在就壓縮,這裡將壓縮檔放在mysql/binbackup/裡,可自行選擇                 tar zcvPf /var/lib/mysql/binbackup/mysql-bin-"$startnum".tar "$file"                 echo -n "$file 壓縮完成"                 ((index++))         else                 echo "$file is empty"        ...

[MySQL] auto_increment 自動編號歸零 重新計算

想要將auto_increment 歸零的方法如下: alter table tablename AUTO_INCREMENT=4; //tablename是你的資料表名稱 //數字是代表你要從哪邊開始接著新增 如最後一筆是4 新增的想要讓他變成5就打上4 終極毀滅指令,刪除表單資料及歸零 truncate table tablename

[Laravel] Laravel 出現 SQLSTATE[42000] Syntax error or access violation 解法

圖片
今天使用MySQL出現SQLSTATE[42000]: Syntax error or access violation,這是因為 SQL_MODE 的限制,修正方式如下: 找到config/database.php,並將 strict 改成False 就可以了 'mysql' => [     'driver' => 'mysql',     'host' => env('DB_HOST', 'localhost'),     'port' => env('DB_PORT', '3306'),     'database' => env('DB_DATABASE', 'forge'),     'username' => env('DB_USERNAME', 'forge'),     'password' => env('DB_PASSWORD', ''),     'charset' => 'utf8',     'collation' => 'utf8_unicode_ci',     'prefix' => '',     'strict' => false,     'engine' => null, ]

[MySQL] Centos6.x 解決 MySQL啟動失敗ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql)

不論是啟用service mysql start或是重啟 service mysql restart都會出現 ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql)怎麼辦?以下是我的解決方法: 環境: Centos6.7 MariaDB 解決方法: 1.先輸入service mysql status,由於執行失敗,service mysql status會顯示錯誤引導你 service mysql status 2.系統顯示MySQL is not running, but lock file (/var/lock/subsys/mysql),這時候先將這個檔案刪掉試試,輸入 rm var/lock/subsys/mysql 3.在嘗試service mysql restart 4.若還是無法啟用,輸入ps -ef | grep mysql查看process,會看到mysql的process,記住 PID ps -ef | grep mysql 5.輸入sudo kill -9 PID ,-9是強制刪除,指定mysql的PID,刪除process sudo kill -9 PID 6.最後再重啟一次,就行了

[MySQL] 解決 MYSQL MariaDB 登入出現 ERROR 1045 (28000) using password: NO

今天在Linux中輸入指令mysql要進入MariaDB時,卻出現 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)的問題,這邊說明我自己的解決方式 環境: Centos6.7 MariaDB 解決方法: 輸入 /usr/bin/mysql_secure_installation初始化 /usr/bin/mysql_secure_installation 接著依序輸入 第一個問題,Enter current password for root (enter for none):。 請直接按下Enter,因為預設MariaDB沒有密碼。 第二個問題,Change the root password? [Y/n]。 是否更改root密碼,極度建議您設定root密碼,請輸入Y。 第三個問題,Remove anonymous users? [Y/n]。 是否移除匿名帳號,請務必移除匿名帳號,否則別人隨便就可以進入您的資料庫了! 第四個問題,Disallow root login remotely? [Y/n]。 是否移除遠端root登入權限,視需求設定,若要允許root遠端登入, 第五個問題,Remove test database and access to it? [Y/n]。 是否移除測試資料庫跟使用者,留著也沒用!移除請輸入Y。 第六個問題,Reload privilege tables now? [Y/n]。 是否刷新權限表,輸入Y完成所有初始化設定! 在嘗試進入一次,輸入 sudo mysql -u root -p 進入,就可以進囉 sudo mysql -u root -p

[MySQL] 深入 MySQL INSERT ... ON DUPLICATE KEY UPDATE 語法

必要條件   資料表中必須有 PRIMARY或UNIQUE的索引   INSERT時須帶入1. 欄位的資料 使用情境 一般我們在做資料新增時會先檢查資料是否存在,都會使用下列語法 IF(SELECT * FROM table WHERE id= '1')   UPDATE table SET a= a+ 1 WHERE id= '1'; ELSE   INSERT INTO table (id, a) VALUES (2, 1); 可以改成 INSERT INTO table (id, a) VALUES (2, 1) ON DUPLICATE KEY UPDATE a= a+ 1; Mysql會自動判斷該主鍵是否重覆,如果重覆就會叫用後面的 UPDATE 多行資料處理 若是用批量新增,則可以在ON DUPLICATE KEY UPDATE 後用VALUES,以下範例: a為UNIQUE,並且資料存在 (2,1,1) 和 (1,3,3),因為a已存在,所以會將(1,3,3)更新至(1,2,3), (2,1,1)更新至 (2,5,1) ,其餘則插入新紀錄 INSERT INTO TABLE (a,b,c) VALUES  (1,2,3),  (2,5,7),  (3,3,6),  (4,8,2)  ON DUPLICATE KEY UPDATE b=VALUES( b) 注意:ON DUPLICATE KEY UPDATE 為MySQL特有語法,並不是SQL標準語法 參考資料:    MySQL官方文件