∮Ω奧米加空間∮»技術文件區»【推薦】MySql 筆記
作者 |
主題 |
dc
管理員
性別:男
來自:瓦肯星
發表總數:10716
註冊時間:2002-05-07 16:32 |
(第 1 篇) 【推薦】MySql 筆記
Table 'abcd' is marked as crashed and should be repaired
直接下修復指令「REPAIR TABLE `錯誤信息中的資料表`」,即可完成修復
REPAIR TABLE abcd
Table 'abcd' doesn't exist
代表當時是使用 Copy data 資料夾的方式備份,而不是使用倒出 .sql 的方式備份。
請使用正常的方式備份
假如有一個 user_info table 我們要裡面的 OID 從左邊數來的第八個之後的字串請使用
OID=12345678acde
select SUBSTRING(OID,8)
from user_info
結果為 abcde
假如我們要增加字串與前置字元可以如下使用
Set @UserName='abc';
set @id=789;
select CONCAT('hi',@id,@UserName) addStr
結果 hi789abc
取得前一天日期
DATE_ADD(CURDATE(), INTERVAL -1 DAY)
搜尋前20天的syslog資料
SELECT * FROM `syslog`
where host_id=2 and TO_DAYS(NOW()) - TO_DAYS(logtime) >=20
order by logtime asc
刪除前90天的資料
delete FROM syslog where host_id=2 and TO_DAYS(NOW()) - TO_DAYS(logtime) >=90
達到 MSSQL with cte as 的語法
SET @tmpsum600 = 'CREATE TEMPORARY TABLE tmpsum2 AS
SELECT SUM(TotalBet) AS TotalBet,SUM(TotalPayout) AS TotalPayout,SUM(MajorPrize) AS MajorPrize,COUNT(DISTINCT userid) AS sumnum
FROM abc a INNER JOIN cde b
ON a.GamePlayHistoryID=b.GamePlayHistoryID WHERE
gameid=600 AND starttime > (select CONCAT(@dt1,'' 12:00:00'') addStr) AND starttime < (select CONCAT(@dt,'' 12:00:00'') addStr)';
PREPARE stmt600 FROM @tmpsum600;
EXECUTE stmt600;
UPDATE dc01 a,tmpsum2 b SET a.TotalBet=b.TotalBet ,a.TotalPayout=b.TotalPayout,a.MajorPrize=b.MajorPrize,a.sumnum=b.sumnum WHERE a.DATE=@dt AND gid=600;
DROP PREPARE stmt600;
DROP TABLE tmpsum2;
本帖由dc最後編輯於2015-09-25 15:37
Your mind to my mind,
your thought to my thought |
發表時間:2012-03-03 18:19 |
|
dc
管理員
性別:男
來自:瓦肯星
發表總數:10716
註冊時間:2002-05-07 16:32 |
(第 2 篇)
由於 Mysql 沒有 row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 的功能
所以對於搜尋出來的結果要編上流水號有點麻煩~但可以透過變數來達到相同的功能
假如我們有一個 Table 名稱是 Rack_Map 我要將 ORDER BY Num DESC,Location ASC 的結果編上流水號可以這樣下,結果是 rank 為從1開始的流水號
SELECT (@rownum := @rownum + 1) AS rank,Host,Location,Num,Unum
FROM Rack_Map, (SELECT @rownum := 0) AS r
ORDER BY Num DESC,Location ASC
本帖由dc最後編輯於2015-11-03 10:45
Your mind to my mind,
your thought to my thought |
發表時間:2014-02-19 14:20 |
|
dc
管理員
性別:男
來自:瓦肯星
發表總數:10716
註冊時間:2002-05-07 16:32 |
(第 3 篇)
http://coding.memory-forest.com/%E7%94%A8%E5%91%BD%E4%BB%A4%E5%88%97%E7%AE%A1%E7%90%86mysql%E4%BD%BF%E7%94%A8%E8%80%85.html
顯示使用者清單:
mysql > select * from mysql.user;
http://blog.toright.com/archives/1214
接下來我們新增一個使用者 killme, 密碼設定為 killpwd, 並且給予資料庫的所有權限
use mysql;
insert into user (host,user,password) values('%','killme',password('killpwd'));
GRANT ALL ON *.* TO 'killme'@localhost IDENTIFIED BY 'killpwd' WITH GRANT OPTION;
FLUSH PRIVILEGES;
如果要給予使用者特定資料庫的操作權限可以這麼做:
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON dbname.* TO 'killme'@localhost IDENTIFIED BY 'killpwd';
如果修改了 mysql.user 的資料,記得 mysql.db 的資料也要一併改喔。
select * from mysql.user;
update mysql.user set Host='xx.xx.xx.xx' where Host='192.xx.xx.xx';
select * from mysql.db;
update mysql.db set Host='xx.xx.xx.x' where Host='192.xx.xx.xx';
insert into mysql.user (host,user,password) values('x.x.x.x','user_name',password('xxx'));
FLUSH PRIVILEGES;
GRANT SELECT,INSERT,UPDATE,DELETE ON dbname.* TO 'user_name'@'x.x.x.x' IDENTIFIED BY 'xxx';
FLUSH PRIVILEGES;
修改完資料後要
FLUSH PRIVILEGES; 在 mysql 資料庫內,一定要用 flush 更新記憶體上的資料
本帖由dc最後編輯於2014-02-19 15:33
Your mind to my mind,
your thought to my thought |
發表時間:2014-02-19 14:46 |
|
dc
管理員
性別:男
來自:瓦肯星
發表總數:10716
註冊時間:2002-05-07 16:32 |
(第 4 篇)
要匯入文字檔到 db 裡並且忽略第一行的話可以這樣下語法,記得檔案要放在 tmp 裡才讀的到
load data infile '/tmp/20140815.txt'
into table test
fields terminated by ','
lines terminated by '\r\n'
IGNORE 1 LINES;
Bash中使用MySQL导入导出CSV格式数据
http://codingstandards.iteye.com/blog/604541
MySQL 超新手入門(19)匯入與匯出資料
http://www.codedata.com.tw/database/mysql-tutorial-19-outfile-dump-infile-import/
本帖由dc最後編輯於2014-08-18 09:45
Your mind to my mind,
your thought to my thought |
發表時間:2014-08-18 09:42 |
|
dc
管理員
性別:男
來自:瓦肯星
發表總數:10716
註冊時間:2002-05-07 16:32 |
(第 5 篇)
如果登入出現
mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
請使用 root 登入
mysql -uroot -p
其他問題的解決方式可以參考 風隨雲想
1.service mysqld stop
2.service mysql start
3.mysql -uroot -p
4. GRANT all ON *.* TO root@'localhost' IDENTIFIED BY '輸入你 root 的密碼';
5.FLUSH PRIVILEGES;
解決 MYSQL 登入時,ERROR 1045 (28000) using password: NO 的方法
我的系統是 UBUNTU 11.04,安裝的MYSQL版本為14.14(注1),安裝好並設定 root 密碼後,透過終端機輸入指令 mysql -u root ,卻出現
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 訊息。
改輸入 mysql -u root -p 強制輸入密碼,卻變成
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
在網路上查詢了一下,發現問題似乎與 'root'@'localhost' ,帳號跟登入位置與密碼對應有關,也發現這問題十分氾濫,並似乎沒有個好的SOP解決流程,於是試了幾種方法,整理成以下心得:
===================================
1.首先,停止MYSQL 服務:
# /etc/init.d/mysql stop or # stop mysql or # service mysql stop
2.接著跳過授權表訪問,命令如下:
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
3.登錄 MYSQL:
# mysql -uroot mysql
or
# mysql -uroot mysql -p
輸入 root 密碼,進入MYSQL。
這裡若依舊跳出 ERROR 1045 (28000) 訊息,則請跳至文末的 A 步驟
4.重新寫入 root 密碼:
mysql> UPDATE user SET Password=PASSWORD('輸入你 root 的新密碼') where USER='root';
5. 把 所有資料庫(含其下的所有資料表),授權給 root,從 localhost 上來,密碼為引號內數據 '*****'。
mysql> GRANT all ON *.* TO root@'localhost' IDENTIFIED BY '輸入你 root 的密碼';
6.更新權限!密碼若有更動,一定要執行此行指令。
mysql> FLUSH PRIVILEGES;
7.離開 MYSQL
mysql> quit
8.輸入密碼,正常進入 MYSQL。
# mysql -uroot -p
===================================
A.直接使用 /etc/mysql/debian.cnf 文件中 [client] 提供的用戶名和密碼:
# mysql -udebian-sys-maint -p
輸入 [client] 中的密碼
mysql> UPDATE user SET Password=PASSWORD('輸入你 root 的新密碼') where USER='root';
// 重新寫入 root 密碼
mysql> GRANT all ON *.* TO root@'localhost' IDENTIFIED BY '輸入你 root 的密碼';
// 把 所有資料庫(含其下的所有資料表),授權給 root,從 localhost 上來,密碼為引號內數據 '*****'。
mysql> FLUSH PRIVILEGES;
// 更新權限!密碼若有更動,一定要執行此行指令。
mysql> quit
# mysql -uroot -p
輸入密碼,正常進入 MYSQL。
===================================
以上兩種狀況我都遇過,依以上方式我的問題都解決了。
另外改好後,MYSQL 系統似乎需要一點時間更動,因為在終端機上MYSQL可進去了,網頁的 phpmyadmin 卻依舊進不去,SSH連也進不去,直到間隔了快 10 秒,才一切正常。
注1: 欲查詢MYSQL版本指令為
# mysql -V
查詢PHP 版本指令為
# php -v
要注意大小寫喔!
Your mind to my mind,
your thought to my thought |
發表時間:2015-11-03 10:37 |
|
dc
管理員
性別:男
來自:瓦肯星
發表總數:10716
註冊時間:2002-05-07 16:32 |
(第 6 篇)
如果無法直接登入的話
# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
可以使用下列的方式登入~
#mysql -u root -p -h 127.0.0.1
#mysql -u root -p -h localhost
Your mind to my mind,
your thought to my thought |
發表時間:2015-11-26 12:04 |
|
所有時間均為GMT+8, 現在是2024-03-29 14:53 |
|