MySQL雜記

啓動、中止、重啓


啓動

一、使用 service 啓動:service mysqld start 二、使用 mysqld 腳本啓動:/etc/inint.d/mysqld start 三、使用 safe_mysqld 啓動:safe_mysqld&php

中止

一、使用 service 啓動:service mysqld stop 二、使用 mysqld 腳本啓動:/etc/inint.d/mysqld stop 三、mysqladmin shutdownhtml

重啓

一、使用 service 啓動:service mysqld restart 二、使用 mysqld 腳本啓動:/etc/inint.d/mysqld restartmysql

ps:實際中發現有的系統使用命令是mysql,不是mysqld;是mysqld_safe,而不是safe_mysqld。sql

mariadb的安裝參見:Redhat / Centos 7 安裝 MariaDB Servershell

容許遠程用戶登陸訪問mysql的方法數據庫


參考原文

MySQL任務


啓動時執行的任務腳本:

配置文件,好比my.cnf中 添加: [server] 或者 [mysqld] 或者 [mysqld_safe] init-file="Your file location" 重啓mysqld 就能夠看到效果了。windows

定時任務:

支持的mysql版本:5.1.x及以上 要查看當前是否已開啓事件調度器,可執行以下SQL:centos

SHOW VARIABLES LIKE 'event_scheduler'; 或bash

SELECT @@event_scheduler; 或服務器

SHOW PROCESSLIST; 若顯示:

+-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | OFF | +-----------------+-------+ 則可執行

SET GLOBAL event_scheduler = 1; 或

SET GLOBAL event_scheduler = ON; 來開啓,也能夠直接在啓動命令加上「–event_scheduler=1」,例如:

mysqld ... --event_scheduler=1

my.ini or my.cnf 中的 [mysqld] 添加 event_scheduler=ON

時間類型

mysql中DATETIME、DATE和TIMESTAMP的區別

內存表

建表加上engine=memory 配置文件中加上

<!-- lang: shell -->
 # 表的大小
tmp_table_size=6000M
max_heap_table_size=6000M

存儲過程

SQLServer訪問MySQL數據

  1. SQLServer經過連接服務器訪問MySQL。連接服務器能夠選擇「Microsoft OLE DB Provider for ODBC Drivers」——即經過ODBC來訪問MySQL。反過來——經過MySQL訪問SQLServer,尚未查到如何實現。

  2. X64的windows系統須要安裝64位版本的MySQL的ODBC驅動。32位的驅動實踐發現是不行的。

  3. 若是點擊「新建連接服務器」—>「其餘數據源」—>「訪問接口」的下拉框選項中沒有「Microsoft OLE DB Provider for ODBC Drivers」的選項,那麼須要安裝一個驅動補丁:「WindowsServer2003.WindowsXP-KB948459-v2-x64-CHS.exe」。在windows2003實測可用。安裝上以後就有那個ODBC的下拉選項了。

  4. 「數據源」填寫ODBC的名字。

  5. 「訪問接口字符串」內容舉例:Driver={MySQL ODBC 5.3.4 Driver};Server=;Database=test;User=root;Password=5585354;Option=3;

  6. 使用「OPENQUERY」方式訪問MySQL連接服務器。例如:SELECT * FROM OPENQUERY(ONLINE, 'select * from UM_ONLINE_INFO; ') ;其中OPENQUERY的兩個參數分別爲連接服務器名和SQL語句。

  7. 「OPENQUERY」的條件查詢能夠這樣寫:

    <!-- lang: sql -->

    SELECT * FROM OPENQUERY(ONLINE, 'select * from UM_ONLINE_INFO; ') WHERE USR_USER_ID = 90898;

也能夠這樣寫 :

<!-- lang: sql -->
SELECT * 
FROM OPENQUERY(ONLINE, 'select * from UM_ONLINE_INFO where USR_USER_ID = 90898;');

但打開執行計劃會發現性能有所不一樣。 SQL執行計劃 一個是遠程全查出來以後再作過濾;另外一個在遠程查詢的時候就已通過濾了。因而想把條件寫到OPENQUERY的SQL語句參數中,固然要可變參數了否則還有什麼意義。如:

<!-- lang: sql -->
declare @user_id int
set @user_id = 90898

declare @sql_smt varchar(512)
set @sql_smt = 'select * from UM_ONLINE_INFO '
set @sql_smt = @sql_smt + 'where USR_USER_ID = '
set @sql_smt = @sql_smt + convert(varchar(12), @user_id)
set @sql_smt = @sql_smt + ';'

select @sql_smt -- select * from UM_ONLINE_INFO where USR_USER_ID = 90898;

SELECT * FROM OPENQUERY(ONLINE, @sql_smt );

但SQLServer2005客戶端執行報錯:「'@sql_smt' 附近有語法錯誤。」,查詢MSDN發現:「OPENQUERY does not accept variables for its arguments.」shit!why?……

可是能夠這樣:

<!-- lang: sql -->
declare @user_id int
set @user_id = 90898

declare @sql_smt varchar(512)
set @sql_smt = 'select * from UM_ONLINE_INFO '
set @sql_smt = @sql_smt + 'where USR_USER_ID = '
set @sql_smt = @sql_smt + convert(varchar(12), @user_id)
set @sql_smt = @sql_smt + ';'

declare @whole_sql_smt varchar(768)
set @whole_sql_smt = 'SELECT * FROM OPENQUERY(ONLINE, '
set @whole_sql_smt = @whole_sql_smt + '''' + @sql_smt + '''' + ');'

select @sql_smt -- select * from UM_ONLINE_INFO where USR_USER_ID = 90898;
select @whole_sql_smt -- SELECT * FROM OPENQUERY(ONLINE, 'select * from UM_ONLINE_INFO where USR_USER_ID = 90898;');

exec (@whole_sql_smt);

參考 這就基本OK了。

SQLServer與MySQL的不一樣之處

命令行執行MySQL腳本

參考 第一種方式:在未鏈接數據庫的狀況下,輸入 mysql -h localhost -u root -p 123456 < d:\book.sql 回車便可; 第二種方式:在已鏈接數據庫的狀況下,此時命令提示符爲mysql>,輸入 source d:\book.sql 或者 . d:\book.sql 回車便可。

命令行新增用戶及用戶權限

參考 mysql> create user 'yht'@'%' identified by '12345678'; mysql> GRANT ALL PRIVILEGES ON * . * TO 'yht'@'%' IDENTIFIED BY '12345678' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

修改mysql用戶密碼

參考 mysqladmin命令(回目錄) 格式以下(其中,USER爲用戶名,PASSWORD爲新密碼): mysqladmin -u USER -p password PASSWORD 該命令以後會提示輸入原密碼,輸入正確後便可修改。 例如,設置root用戶的密碼爲123456,則 mysqladmin -u root -p password 123456 UPDATE user 語句(回目錄) 這種方式必須是先用root賬戶登入mysql,而後執行: UPDATE user SET password=PASSWORD('123456') WHERE user='root'; FLUSH PRIVILEGES; SET PASSWORD 語句(回目錄) 這種方式也須要先用root命令登入mysql,而後執行: SET PASSWORD FOR root=PASSWORD('123456');

#設置mysql的鏈接通道的字符集和校驗規則 使用putty鏈接mysql時,字符集不是utf-8,運行 SET CHARACTER SET utf8; 字符就不是亂碼了。

windows 安裝mysql

參見windows下安裝mysql筆記

基本步驟:

  • 建立my.ini配置文件
  • 初始化。 mysqld --initialize-insecure
  • 註冊MySQL服務到Windows系統。mysqld -install
  • 啓動系統的MySQL服務。net start mysql

幾個要注意的的點:

  • 須要打開具備管理員權限的命令行執行上面的命令。

  • my.ini 中的basedir 爲MySQL的安裝目錄。我理解就是MYSQL_HOME所在的目錄(解壓後有bin、include、share等文件夾的目錄)。不要亂設。

  • 更改my.ini須要重啓mysql服務才能生效。

  • 要用mysqld --initialize-insecure。不要執行mysqld --initialize。否則設置用戶密碼麻煩。

  1. mysqld --initialize-insecure自動生成無密碼的root用戶
  2. mysqld --initialize自動生成帶隨機密碼的root用戶
  • data目錄是否須要手動建立和MySQL版本有關:8.0.11不須要,5.7.22須要。能夠先不建立。

執行

mysqld --initialize-insecure

看是否報錯

  • --initialize-insecure 參數前面是2個減號。一個減號不報錯。但net start mysql時服務沒法正常啓動。

  • 搞錯了怎麼辦?

    • 刪除data文件夾
    • mysqld -remove 從系統中刪除MySQL的服務項。
    • net stop mysql 中止mysql服務。
相關文章
相關標籤/搜索