MySQL基礎

標題

mysql
標籤:mysql

前言

SQL語句主要分爲三大類

DDL語句
DDL是數據定義語句,是對數據庫內部的對象進行創建、刪除、修改等操作的語句.create、drop、alter等(DBA常用)

DML語句
DML是數據操作語句,指對數據庫表記錄的基本操作,insert、update、delete、select等(開發常用)

DCL語句
DCL是數據控制語句,用於控制不同數據段直接的許可和訪問級別的語句.定義了數據庫、表、字段、用戶的訪問權限和安全級別.主要是grant、revoke等(DBA常用)

數據庫基本操作

數據庫的增刪改查

庫操作

創建庫

mysql > create database db1;

查看庫

mysql > show databases; 
mysql > show create databasee db1;  //更詳細的查看庫

使用庫

mysql > use db1;

表操作

創建表

mysql > create tables 表名(字段 類型(修飾符))

查看錶

查看所有表:mysql > show tables ;
查看錶記錄:mysql > show table status like '表名' ;
查看錶結構:mysql > desc '表名' ;
查看錶記錄:mysql > select * from  '表名' ;

修改表

修改表名:mysql > rename table  '源表名'  to  '新表名' ;

字段記錄操作

字段

添加字段:mysql > alter table '表名'  add '字段' '修飾符';
刪除字段:mysql > alter table '表名'  drop '字段' ;
修改字段:mysql > alter table  '表名' change '舊字段' '新字段'  '修飾符';

記錄

添加記錄:insert into '表名(記錄,記錄)'  values (),(),();
        :insert into '表名'  values  (),(),();
修改記錄:update '表名' set 字段=''  where 字段='';
刪除記錄:delete from '表名' where  '字段'='' ;

查詢操作

查詢

簡單查詢:select * from '表名';
避免重複:select distinct '字段' from '表名';
條件查詢:select 字段,字段 from 表名 where id<=5(條件);
四則運算查詢:select id,dep_id,id*dep_id from company.employee5  where id<=5;
定義顯示格式一:select id*dep_id as "id and dep_id's sum" from company.employee5  where id<=5;
定義顯示格式:SELECT CONCAT(name, ' annual salary: ', salary*14)  AS Annual_salary FROM employee5;   //定義格式+四個運算,CONCAT是關鍵字
多條件:select '字段,字段‘ from '表名' WHERRE '條件一' AND '條件二';
關鍵字between and:
select  '字段,字段' from '表名'  where 字段  BETWEEN
'條件一' AND '條件二';

----------
排序查詢:
select '字段' from  '表名' ORDER BY  '排序字段';//字段後加DESC正序,ASC反序

限制查詢的記錄數:
select '字段' from '表名' ORDER BY  '字段,DESC|ACS' LIMIT  '數字'; //數字有兩種的是(5,從初始位置到第五個)(2,5,第三個開始,共顯示五個)

使用集合的查詢:
select COUNT(*)  from '表名';
select COUNT(*) FROM '表名' WHERE dep_id=101;
select MAX(salary) FROM '表名';
select MIN(salary) FROM '表名';
select AVG(salary) FROM '表名';
select SUM(salary) FROM '表名';
select SUM(salary) FROM '表名' WHERE dep_id=101;

分組查詢:
select '字段' from  '表名' group by 字段;   //可參考下列面試題

模糊查詢:
select '字段' from  '表名'  LIKE  '關鍵字';

正則表達式查詢:
select * from '表名' where '字段'  REGEXP '關鍵字'; 

刪庫


刪庫:drop database '庫名';
刪表:drop table   '表名'

高級操作

連接數據庫

# mysql -uroot  -p  -h10.18.44.209  -p3306

授權
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

修改數據庫密碼

# vim  /etc/my.cnf 追加
validate_password=off
# systemctl restart mysqld
方法一:
mysql > SET PASSWORD FOR  user3@'localhost'='new_password';
mysql > flush privileges;
方法二:
mysql > update mysql.user set password=password('newpassword') where user='root';
mysql > flush privileges;
方式三:
mysql > set password for 'root'@'localhost'=password('newpassord');

編譯安裝需要參數


[[email protected] ~]# cmake . \
-DWITH_BOOST=boost_1_59_0/ \                    指定boost目錄
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \       指定安裝目錄
-DSYSCONFDIR=/etc \                             配置文件位置  
-DMYSQL_DATADIR=/usr/local/mysql/data \         數據目錄(非常重要 錯誤日誌、數據存放位置)
-DINSTALL_MANDIR=/usr/share/man \               man手冊
-DMYSQL_TCP_PORT=3306 \                         默認端口3306
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \             sock文件位置,用來做網絡通信的  
-DDEFAULT_CHARSET=utf8 \                        字符集的支持  默認
-DEXTRA_CHARSETS=all \                          字符集的支持  擴展支持
-DDEFAULT_COLLATION=utf8_general_ci \           字符集的支持   設定默認排序規則
-DWITH_READLINE=1 \                             可以上下泛歷史命令  
-DWITH_SSL=system \                             使用證書登陸   (安全 但是影響傳輸速度)      
-DWITH_EMBEDDED_SERVER=1 \                      編譯嵌入式服務器支持  
-DENABLED_LOCAL_INFILE=1 \                      支持從本機導入
-DWITH_INNOBASE_STORAGE_ENGINE=1                默認引擎   數據如何存儲的庫

msyql中now()、sysdate()、curdate()區別

SELECT date_sub(date_sub(date_format(now(),'%y-%m-%d '),interval extract( day from now())-1 day),interval 1 month)
上個月第一天
select date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract(  day from now()) day),interval 0 month)
上個月最後一天

select date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract(  day from now())-1 day),interval 0 month)
這個月第一天

Mysql日誌管理

error log    錯誤日誌        排錯    /var/log/mysqld.log【默認開啓】
bin log      二進制日誌      備份    增量備份 DDL DML DCL
Relay log    中繼日誌        複製    接收 replication master 
slow log     慢查詢日誌       調優    查詢時間超過指定值
Error Log
log-error=/var/log/mysqld.log
Binary Log(用於備份恢復數據)
產生binlog日誌:
log-bin=/var/log/mysql-bin/slave2
serve-id=2

# mkdir /var/log/mysql-bin/slave2
#chmod mysql.mysql /var/log/mysql-bin/slave
#systemctl restart mysqld

1. 重啓mysqld 會截斷舊日誌產生新的日誌
2. 刷新日誌會截斷舊日誌產生新的日誌
mysql> flush logs 
3. 刪除所有binlog(禁用)
mysql> reset master
4. 刪除部分日誌
mysql> PURGE BINARY LOGS TO 'mysql-bin.010';
mysql> PURGE BINARY LOGS BEFORE '2016-04-02 22:46:26';
5. 暫停binlog日誌功能(僅對當前會話生效)
mysql> SET SQL_LOG_BIN=0;
mysql> SET SQL_LOG_BIN=1;

讀取binlog日誌:
# mysqlbinlog mysql.000002

按datetime讀取:
# mysqlbinlog mysql.000002 --start-datetime="2018-12-05 10:02:56"
# mysqlbinlog mysql.000002 --stop-datetime="2018-12-05 11:02:54"
# mysqlbinlog mysql.000002 --start-datetime="2018-12-05 10:02:56" --stop-datetime="2018-12-05 11:02:54" 

按position讀取:
# mysqlbinlog mysql.000002 --start-position=260
# mysqlbinlog mysql.000002 --stop-position=260
# mysqlbinlog mysql.000002 --start-position=260 --stop-position=930

查看帶加密的binlong日誌
mysqlbinlog --base64-output=decode-rows  -v  日誌文件

根據binlog恢復數據:
根據時間點恢復數據
# mysqlbinlog --start-datetime='2014-11-25 11:56:54'  --stop-datetime='2014-11-25 11:57:41'  tiger-bin.000001 | mysql -u root -p1

根據位置點恢復數據
# mysqlbinlog --start-position 106 --stop-position  527 tiger-bin.000001 | mysql -u root -p1  

刷新bin-log日誌:
#mysqladmin  flush-logs

去除binlog加密:
transaction_isolation=repeatable-read
binlog_format=mixed
慢查詢:
slow_query_log=1
slow_query_log_file=/var/log/mysql-slow/slow.log
long_query_time=3

# mkdir /var/log/mysql-slow/
# chown mysql.mysql /var/log/mysql-slow/
# systemctl restart mysqld

查看慢查詢日誌
測試:BENCHMARK(count,expr)
SELECT BENCHMARK(50000000,2*3);

mysql中TIMESTAMPDIFF和TIMESTAMPADD函數的用法

今天在處理工單的時候,其中的一個需求是某商品的發貨時效(即下單時間和發貨時間的時間差),接觸到了TIMESTAMPDIFF函數

TIMESTAMPDIFF

TIMERSTAMPDIFF語法:
TIMERSTAMPDIFF(interval,datetime_expr1,datetime_expr2)

說明:
該函數是返回datetime_expr1和datetime_expr2之間的整數差,其中單位有interval參數決定,interval的常用參數有:
FRAC_SECOND   時間間隔是毫秒
SECOND        時間間隔是秒
MINUTE        時間間隔是分鐘
HOUR          時間間隔是小時
DAY           時間間隔是天
WEEK          時間間隔是周
MOUTH         時間間隔是月
QUARTER       時間間隔是季度
YEAR          時間間隔是年

示例:

MariaDB [(none)]> select timestampdiff(hour,'2018-06-05 09:00:00','2018-06-15 09:00:00');
+-----------------------------------------------------------------+
| timestampdiff(hour,'2018-06-05 09:00:00','2018-06-15 09:00:00') |
+-----------------------------------------------------------------+
|                                                             240 |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)

示例二:

MariaDB [(none)]> select timestampdiff(day,'2018-06-05 09:00:00','2018-06-15 09:00:00');
+----------------------------------------------------------------+
| timestampdiff(day,'2018-06-05 09:00:00','2018-06-15 09:00:00') |
+----------------------------------------------------------------+
|                                                             10 |
+----------------------------------------------------------------+
1 row in set (0.00 sec)

TIMESTAMPADD

TIMESTAMPADD語法:
TIMESTAMPADD(interval,int_expr,datetime_expr)

說明:
將整型表達式int_expr 添加到日期或日期時間表達式 datetime_expr中。式中的interval和TIMESTAMPDIFF中列舉的取值是一樣的。

示例:

MariaDB [(none)]> select timestampadd(second,86400,'2018-06-15 09:00:00');
+--------------------------------------------------+
| timestampadd(second,86400,'2018-06-15 09:00:00') |
+--------------------------------------------------+
| 2018-06-16 09:00:00                              |
+--------------------------------------------------+
1 row in set (0.00 sec)

msyql中CASE WHEN語法

MySQL中case when語句,用於計算條件列表並返回多個可能表達式之一。

CASE具有兩種格式:簡單CASE函數將某個表達式與一組簡單表達式進行比較以確定結果。CASE搜索函數計算一組布爾表達式以確定結果。兩種都支持可選的ELSE函數。

1)簡單CASE函數
語法如下:

CASE input_expression  
WHEN when_expression THEN  
    result_expression [...n ] [  
ELSE  
    else_result_expression  
END  

參數介紹

input_expression是使用簡單 CASE 格式時所計算的表達式。Input_expression 是任何有效的 Microsoft SQL Server 表達式。
WHEN when_expression使用簡單 CASE 格式時 input_expression 所比較的簡單表達式。When_expression 是任意有效的 SQL Server 表達式。Input_expression 和每個 when_expression 的數據類型必須相同,或者是隱性轉換。
佔位符,表明可以使用多個 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。
THEN result_expression 當 input_expression = when_expression 取值爲 TRUE,或者 Boolean_expression 取值 TRUE 時返回的表達式。
result expression 是任意有效的 SQL Server 表達式。
ELSE else_result_expression當比較運算取值不爲 TRUE 時返回的表達式。如果省略此參數並且比較運算取值不爲 TRUE,CASE 將返回 NULL 值。else_result_expression 是任意有效的 SQL Server 表達式。else_result_expression 和所有 result_expression 的數據類型必須相同,或者必須是隱性轉換。

簡單 CASE 函數:返回結果值介紹:

計算 input_expression,然後按指定順序對每個 WHEN 子句的 input_expression = when_expression 進行計算。
返回第一個取值爲 TRUE 的 (input_expression = when_expression) 的 result_expression。如果沒有取值爲 TRUE 的 input_expression = when_expression,則當指定 ELSE 子句時 SQL Server 將返回 else_result_expression;若沒有指定 ELSE 子句,則返回 NULL 值。

2)CASE搜索函數
語法如下:

CASE  
WHEN Boolean_expression THEN  
    result_expression [...n ] [  
ELSE  
    else_result_expression  
END  

參數介紹:

WHEN Boolean_expression 使用 CASE 搜索格式時所計算的布爾表達式。Boolean_expression 是任意有效的布爾表達式。結果類型從 result_expressions 和可選 else_result_expression 的類型集合中返回最高的優先規則類型。有關更多信息,請參見數據類型的優先順序。

CASE 搜索函數:返回結果值介紹:
按指定順序爲每個 WHEN 子句的 Boolean_expression 求值。返回第一個取值爲 TRUE 的 Boolean_expression 的 result_expression。
如果沒有取值爲 TRUE 的 Boolean_expression,則當指定 ELSE 子句時 SQL Server 將返回 else_result_expression;若沒有指定 ELSE 子句,則返回 NULL 值。

3)CASE WHEN例子介紹
1、僅帶簡單case的select語句

select 
    CASE good_type
WHEN '0' THEN
    '食品類'
WHEN '1' THEN
    '飲料類'
WHEN '2' THEN
    '日用品'
WHEN '3' THEN
    '鮮果類'
END AS good_type_now,
good_type,user_id,user_name
FROM 
    express.t_main_order
+---------------+-----------+---------+-----------+
| good_type_now | good_type | user_id | user_name |
+---------------+-----------+---------+-----------+
| 食品類        |         0 | 1       | tina      |
| 食品類        |         0 | 2       | tige      |
| 飲料類        |         1 | 3       | five      |
| 日用品        |         2 | 4       | wate      |
| 鮮果類        |         3 | 5       | fiww      |
| 鮮果類        |         3 | 6       | www       |
| 鮮果類        |         3 | 7       | wfiw      |
+---------------+-----------+---------+-----------+

2、使用帶有簡單CASE函數和CASE搜索函數的select語句
在select語句中,CASE搜索函數允許根據比較值

select 
    CASE 
WHEN good_type<2 
    THEN '<2' 
WHEN good_type>=2 AND good_type<3 
    THEN '>=2 && <3' 
    ELSE '>=3' END AS good_now_type,
good_type,user_id,user_name 
FROM t_main_order;
+---------------+-----------+---------+-----------+
| good_now_type | good_type | user_id | user_name |
+---------------+-----------+---------+-----------+
| <2            |         0 | 1       | tina      |
| <2            |         0 | 2       | tige      |
| <2            |         1 | 3       | five      |
| >=2 && <3     |         2 | 4       | wate      |
| >=3           |         3 | 5       | fiww      |
| >=3           |         3 | 6       | www       |
| >=3           |         3 | 7       | wfiw      |
+---------------+-----------+---------+-----------+

3)CASE的其他用法

select 
    CASE 
WHEN good_type<2 
    THEN '<2' 
WHEN good_type>=2 AND good_type<3 
    THEN '>=2 && <3' ELSE '>=3' 
END AS good_now_type,
    count(*) AS num_count 
FROM t_main_order 
GROUP BY good_now_type 
ORDER BY num_count;
+---------------+-----------+
| good_now_type | num_count |
+---------------+-----------+
| >=2 && <3     |         1 |
| <2            |         3 |
| >=3           |         3 |
+---------------+-----------+

left join、right join、inner join的區別

left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄
right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄
inner join(等值連接) 只返回兩個表中聯結字段相等的行

舉例如下:


表A記錄如下:
aID     aNum
1     a20050111
2     a20050112
3     a20050113
4     a20050114
5     a20050115

表B記錄如下:
bID     bName
1     2006032401
2     2006032402
3     2006032403
4     2006032404
8     2006032408


1.left join

sql語句如下:
select * from A
left join B
on A.aID = B.bID

結果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
5     a20050115    NULL     NULL

(所影響的行數爲 5 行)
結果說明:
left join是以A表的記錄爲基礎的,A可以看成左表,B可以看成右表,left join是以左表爲準的.
換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中爲: A.aID = B.bID).
B表記錄不足的地方均爲NULL.


2.right join

sql語句如下:
select * from A
right join B
on A.aID = B.bID

結果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
NULL     NULL     8     2006032408

(所影響的行數爲 5 行)
結果說明:
仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(B)爲基礎的,A表不足的地方用NULL填充.


3.inner join

sql語句如下:
select * from A
innerjoin B
on A.aID = B.bID

結果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404

結果說明:
很明顯,這裏只顯示出了 A.aID = B.bID的記錄.這說明inner join並不以誰爲基礎,它只顯示符合條件的記錄.


注:
LEFT JOIN操作用於在任何的 FROM 子句中,組合來源表的記錄。使用 LEFT JOIN 運算來創建一個左邊外部聯接。左邊外部聯接將包含了從第一個(左邊)開始的兩個表中的全部記錄,即使在第二個(右邊)表中並沒有相符值的記錄。

語法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2

說明:table1, table2參數用於指定要將記錄組合的表的名稱。
field1, field2參數指定被聯接的字段的名稱。且這些字段必須有相同的數據類型及包含相同類型的數據,但它們不需要有相同的名稱。
compopr參數指定關係比較運算符:"=", "<", ">", "<=", ">=" 或 "<>"。
如果在INNER JOIN操作中要聯接包含Memo 數據類型或 OLE Object 數據類型數據的字段,將會發生錯誤.

其他常用函數

DATE_FORMAT
GROUP BY
ORDER BY
LIMIT
AS
DATE
UNION
UNION ALL
AND
IN

數據庫備份

基本概念

備份過程中必須考慮因素:
1. 數據的一致性
2. 服務的可用性

======================================

邏輯備份: 備份的是建表、建庫、插入等操作所執行SQL語句(DDL DML DCL),適用於中小型數據庫,效率相對較低。
mysqldump
binlog
mydumper
phpmyadmin

物理備份: 直接複製數據庫文件,適用於大型數據庫環境,不受存儲引擎的限制,但不能恢復到不同的MySQL版本。
tar,cp
mysqlhotcopy  只能用於備份MyISAM。
xtrabackup
inbackup
lvm snapshot

======================================

完全備份
增量備份
差異備份
======================================

面試題

將測試數據表導入數據庫,其中name字段代表“姓名”,score字段代表“分數”。

create table `t1` (
    `id` double ,
    `name` varchar (300),
    `score` double
);

insert into `t1` (`id`, `name`, `score`) values('1','n1','59');
insert into `t1` (`id`, `name`, `score`) values('2','n2','66');
insert into `t1` (`id`, `name`, `score`) values('3','n3','78');
insert into `t1` (`id`, `name`, `score`) values('4','n1','48');
insert into `t1` (`id`, `name`, `score`) values('5','n3','85');
insert into `t1` (`id`, `name`, `score`) values('6','n5','51');
insert into `t1` (`id`, `name`, `score`) values('7','n4','98');
insert into `t1` (`id`, `name`, `score`) values('8','n5','53');
insert into `t1` (`id`, `name`, `score`) values('9','n2','67');
insert into `t1` (`id`, `name`, `score`) values('10','n4','88');
1. 單分數最高的人和單分數最低的人。
mysql> select name,score from t1 group by score desc limit 1;
mysql> select name,score from t1 group by score ASC limit 1;
2. 兩門分數加起來的第2至5名。
mysql> select name,sum(score) from t1 group by name order by sum(score) desc limit 1,4;
+------+------------+
| name | sum(score) |
+------+------------+
| n3   |        163 |
| n2   |        133 |
| n1   |        107 |
| n5   |        104 |
+------+------------+
3. 兩門總分數在150分以下的人。
select name,sum(score) from t1 group by name having sum(score) < 150;
4. 兩門平均分數介於60和80的人。
select name,avg(score) from t1 group by name having avg(score) between 60 and 80;
select name,avg(score) from t1 group by name having avg(score) >60 and avg(score) <80;
5. 總分大於150分,平均分小於90分的人數。
mysql> select name,sum(score),avg(score) from t1 group by name having sum(score)>150 and avg(score)<90;
+------+------------+------------+
| name | sum(score) | avg(score) |
+------+------------+------------+
| n3   |        163 |       81.5 |
+------+------------+------------+
1 row in set (0.00 sec)
6. 總分大於150分,平均分小於90分的人數有幾個。
select count(distinct name) from t1 group by name having sum(score) > 150 and avg(score) < 90; 

主從切換

正常切換

1.檢查slave同步狀態

在開始切換之前先對主庫進行鎖表:

flush tables with read lock

(在執行完成後生產環境必須等待所有語句執行完成)

在flush tables with read lock成功獲得鎖之前,必須等待所有語句執行完成(包括SELECT)。所以如果有個慢查詢在執行,或者一個打開的事務,或者其他進程拿着表鎖,flush tables with read lock就會被阻塞,直到所有的鎖被釋放。請看下面的例子:

mysql> show processlist;
+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
| Id | User | Host      | db   | Command    | Time | State             | Info                                                                 |
+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
|  4 | root | localhost | test | Query      |   80 | Sending data      | select count(*) from t t1 join t t2 join t t3 join t t4 where t1.b=0 |
|  5 | root | localhost | test | Query      |   62 | Flushing tables   | flush tables with read lock                                          |
|  6 | root | localhost | test | Field List |   35 | Waiting for table |                                                                      |
|  7 | root | localhost | test | Query      |    0 | NULL              | show processlist                                                     |
+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
4 rows in set (0.00 sec)

複製代碼

flush data

切換完成後可以釋放鎖

unlock tables

1)在master執行:show processlist;

顯示Master has sent all binlog to slave; waiting for binlog to be updated

2)在slave執行:show processlist;

顯示Slave has read all relay log; waiting for the slave I/O thread to update it

mysql> show slave status \G;

檢查IO及SQL線程是否正常,如果爲NO表明同步不一致,需要重新將slave同步保持主從數據一致。

3)停止slave io線程

在slave執行:mysql> STOP SLAVE IO_THREAD

mysql> SHOW PROCESSLIST;

確保狀態爲:has read all relay log

以上都執行完成後可以把slave提升爲master:

4)提升slave爲master

Stop slave;

Reset master;

Reset slave all; 在5.6.3版本之後

Reset slave; 在5.6.3版本之前

查看slave是否只讀模式:show variables like 'read_only';

只讀模式需要修改my.cnf文件,註釋read-only=1並重啓mysql服務。

或者不重啓使用命令關閉只讀,但下次重啓後失效:set global read_only=off;

mysql> show master status \G;

備註:reset slave all 命令會刪除從庫的 replication 參數,之後 show slave status\G 的信息返回爲空。

5)將原來master變爲slave

在新的master上創建同步用戶:

grant replication slave on *.* repl@'IP of slave' identified by 'replpwd';

在新的slave上重置binlog:

Reset master;

change master to master_host='192.168.0.104', //Master 服務器Ip

master_port=3306,

master_user='repl',

master_password=’replpwd’,

master_log_file='master-bin.000001',//Master服務器產生的日誌

master_log_pos=?;//master binlog pos

以上最後兩步可以在master執行:show master status

啓動slave:start slave; 並查看slave狀態:show slave status\G;

           異常切換

主機故障或者宕機:

1)   在salve執行:

stop slave;

reset master;

查看是否只讀模式:show variables like 'read_only';

只讀模式需要修改my.cnf文件,註釋read-only=1並重啓mysql服務。

或者不重啓使用命令關閉只讀,但下次重啓後失效:set global read_only=off;

查看show slave status \G;

查看show master status \G;

將從庫IP地址改爲主庫IP地址,測試應用連接是否正常。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章