天天看點

MySql學習(MariaDb)

資料

http://www.cnblogs.com/lyhabc/p/3691555.html

 http://www.cnblogs.com/lyhabc/p/3691555.html

MariaDb

官網: https://mariadb.org/

安裝位址: https://downloads.mariadb.org/mariadb/repositories

1. MySql .net Connector 在執行完指令後,關閉連接配接, 字元串中的 Password 會被清空。 設定帶有 Password  的新字元串,連接配接字元串也不顯示,但可以打開。

2. 我使用的是 HeidiSql用戶端, 在使用 group_concat 函數時報錯, 調試發現, group_concat 函數後面有一個空格,如果去除空格,則正确。不知道是用戶端的原因,還是MySql的原因。

3. MySqlWorkbench 自定義快捷鍵: http://blog.csdn.net/stableboy/article/details/45887035

4. 國内鏡像: 

5. 連接配接: mysql -uroot -p1234

Windows安裝

安裝多份執行個體 , 拷貝多份 my.ini 目錄。運作:

C:\Program Files\MySQL\MySQL Server 5.7\bin>mysqld --install MySql57_2 --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7_2\my.ini"

linux設定

檢視狀态: service mysql status

啟動服務: service mysql start

對于mariadb新版: systemctl restart mariadb.service

轉移資料庫

http://blog.csdn.net/renfufei/article/details/17616549

檢視配置

查找位置 

which mysqld

/usr/sbin/mysqld --verbose  --help  

找出配置檔案位址:

/usr/sbin/mysqld --verbose --help  | grep -A1 'Default options'

-A1  顯示查找到該行以及該行之後的 after 1行。

大小寫

設定MySql 區分大小寫:http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_lower_case_table_names

  1)找到Mysql服務的配置檔案,它在服務啟動參數中: --defaults-file  ,預設是:C:\ProgramData\MySQL\MySQL Server 5.6\my.ini

  2)在my.ini,在  [mysqld] 下添加: lower_case_table_names=2

  3)重新開機MySql服務。

0:存儲為指定,大小寫比較。 特殊情況:Windows,Mac 不能指定為0

1: 存儲為小寫。

2:存儲為給定的名稱,但使用小寫比較。

CentOs7+mariadb10.0 路徑: /etc/my.cnf.d/server.cnf

 Ubuntu14+ mariadb10.1 路徑: /etc/mysql/my.conf

設定遠端連接配接

參考:http://www.cnblogs.com/24la/p/mariadb-remoting-access.html

在本地打開mysql,執行:

use mysql;

select * from user\G;  #檢視 user = 'root' 的記錄。 \G 表示一行一段的展示,友善閱讀。

GRANT ALL PRIVILEGES ON *.* to 'root'@'%' identified by '123456';  

flush 

privileges

;

如果上面的辦法不行(影響行數為0),則可以修改配置檔案。把 my.conf 裡的 bind-address一行注釋掉。

添加使用者

程式執行時的使用者及權限:

CREATE USER 'testuser'@'%' IDENTIFIED BY '1234';

GRANT USAGE ON *.* TO 'testuser'@'%';

GRANT SELECT, EXECUTE,CREATE,  CREATE TEMPORARY TABLES, DELETE, INSERT,  UPDATE, LOCK TABLES ON `test`.* TO 'testuser'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

SHOW GRANTS FOR 'testuser'@'%';

用戶端管理者的權限:

GRANT SELECT, EXECUTE, SHOW VIEW, ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, LOCK TABLES ON `test`.* TO 'testuser'@'%' WITH GRANT OPTION;

修改密碼

先看使用者在哪些主機上定義。

SELECT `user`, `host`  FROM `mysql`.`user`;

SET PASSWORD FOR 'root'@'%' = PASSWORD('lwl417');

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('lwl417');

編碼

MySql編碼最奇葩,标準編碼: utf8mb4

collation:  utf8mb4_general_ci

characterset: utf8mb4

非主鍵更新删除報錯

http://jingyan.baidu.com/article/e5c39bf58ed69239d76033a4.html

執行:

SET SQL_SAFE_UPDATES = 0;

備份還原

我沒有找到好的備份還原方法,MySql 這一點做的實在太差。

備份分為兩部分: 一是備份腳本,包含表結構,函數,存儲過程,   二是備份Insert資料.

預設情況下,導出資料庫和 Insert 資料 .不包含存儲過程和函數 . 

一. 腳本:

mysqldump --host=server --user=root --password=1234 --no-data  --routines    DataBaseName > FileName

-d, --no-data   是不生成Insert語句

-R, --routines 是包含存儲過程和函數

二. 僅 insert語句.

mysqldump -u root -t   DataBaseName > FileName

-t, --no-create-info , 在預設的基礎上,去除 create sql , 就剩 insert sql 了. 

恢複:

mysql -uroot -p"db_password" -f dbname < backup.sql  

-f 參數表示在導出過程中忽略出現的SQL錯誤

主從 資料同步設定

http://369369.blog.51cto.com/319630/790921/

快速複制資料庫

mysqldump -h ${源伺服器IP}  -uroot -p123456  ${源資料庫} --add-drop-table | mysql -h ${目标資料庫IP}  -u root -p123456  ${目标資料庫}
           
如果要忽略某些表, mysql dump 時添加:
--ignore-table=database.table1 --ignore-table=database.table2

           
https://blog.csdn.net/whatlookingfor/article/details/51942566           

文法

1.函數模闆:

delimiter  $$

CREATE function  CompareStr (FirstVal varchar(1000),SecondVal varchar(1000) )
returns int
begin
    
     if ( FirstVal is null )  then 
         return -1 ;  
    end if;
    
    if ( SecondVal is null )  then 
         return -1 ;  
    end if;
    
    set FirstVal = lower(rtrim(ltrim(FirstVal)));
    set SecondVal = lower(rtrim(ltrim(SecondVal)));    
    
    
    if (FirstVal = SecondVal ) then 
        return 0;
    else 
        return 1;
    end if;
 
end
$$ 
DELIMITER ;
       

If ( condition) then   statement  elseif ( condition ) then statement  end if ; 最後的 ; 一定要有。

2.存儲過程模闆

DELIMITER $$
CREATE  PROCEDURE `S_CreateVarTable`(VarTable varchar(50) , VarName   varchar(50), VarValue varchar(9)  )
label_pro:
begin

set @CorpTable = replace(VarTable , concat( '{' , VarName ,'}' ),  concat('{' , VarValue , '}')) ; 

if exists (select 1 from information_schema.Tables where table_schema= database() and  table_Name = @CorpTable ) then
    leave label_pro;
end if;

set @sql =  N'
create table `{InstanceTable}` (
select *
from `{VarTable}`
limit 0,0 );
';

set @sql = replace(@sql,'{VarTable}',   VarTable) ;
set @sql = replace(@sql,'{InstanceTable}',  @CorpTable) ;
 
prepare smt from @sql ;
execute smt ;
 
end$$
DELIMITER ;      

3. 修改自增種子值: 

alter table 

users

AUTO_INCREMENT=10000;

4. 計算列:

https://mariadb.com/kb/en/mariadb/virtual-computed-columns/

http://www.linuxidc.com/Linux/2016-02/128066.htm

在建立列類型後面添加:  GENERATED ALWAYS AS ($表達式$)  

如果是計算列, MySql 有兩種方式:Virtual 和 Stored。  MariaDb 稱為: Virtual 和 Presistent

5. 血的教訓.  分頁必須要有 order by 

詭異的情況:   group by  broker_id , dealer_id   limit #{take} , #{skip}  擷取所有的資料時, 出現重複資料.

MySql學習(MariaDb)

  作者:NewSea     出處:http://newsea.cnblogs.com/   

QQ,MSN:[email protected]

  如無特别标記說明,均為NewSea原創,版權私有,翻載必糾。歡迎交流,轉載,但要在頁面明顯位置給出原文連接配接。謝謝。

上一篇: git筆記
下一篇: Docker筆記