1. 授權開發人員mysql權限。
主庫:
從庫:
1. 生産環境讀寫分離賬戶設定:
主庫(提供寫服務):webmysql(資料庫) user(賬戶) ip:10.1.1.21 port 3306
從庫(提供讀服務):webmysql(資料庫) user(賬戶) ip:10.1.1.22 port 3306
2. 資料庫備份。
從庫備份要打開binlog,備份包括全備和binlog增量備份。
3. 建立資料庫指定字元集:
GBK:create database darren DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
UTF8: CREATE DATABASE darren DEFAULT CHARACTER SET utf8 COLLATEutf8_general_ci;
4. 檢視資料庫的使用者:
selectuser,host from mysql.user;
drop user'root'@'localhost'; 删除root使用者
deletefrom mysql.user 删除全部使用者
删除使用者時有大寫,用drop是删不掉的,需要用delete
deletefrom mysql.user where user=’Root’ and host=’localhost’;
grant allprivileges on *.* to system@’localhost’ identified by ‘mysqlpassword’ withgrant option (建立新的資料庫管理者賬号,with grantoption的意識是使system賬戶有賦予其他賬号的權限。)
另一種授權的方法:
先建立使用者:create user Darren@’localhost’identified by ‘password’;
再授權:grant all on *.* to Darren@’localhost’;
收回權限:
REVOKEdelete on wordpress.* FROM ‘wordpress’@’localhost’;
建立表:
createtable test (id int(4) not null primary key auto_increment,name char(20) notnull);
desc 表名 :檢視表結構
showcloumns from 表名
showcreate table mysql.表名\G
show indexfrom 表名 :檢視索引
建表後添加索引:
altertable 表名 add index 索引名(name)
createindex 索引名 on 表名(name:列)--不能建立主鍵索引
Show grantfor system@‘localhost’ (檢視system賬号的權限。)
Selectuser();目前使用者。
Showcreate database mysql; 檢視建立mysql資料庫的字元集類型。
select *from darren.test 檢視資料庫的表。
showprocess list 檢視mysql目前的線程數(使用者執行的mysql語句)
注:語句如果停留太久說明資料庫有問題,需要優化。顯示全部的話用show full processlist
mysql –uroot –p ‘password’ –e “show proesslist;” | grep xxx或者>xxx.log
注:-e的好處是可以過濾一些不需要的東西
show variables 顯示資料庫中的配置,包括my.cnf中的配置是否生效。
show global status 檢視資料庫目前的狀态。-包括線上查詢人數,緩存用量,插入資料的人數,删除資料的人數。
set global server_id=2 不重新開機資料使修改資料庫參數,讓其生效。如果想重新開機還生效需要改配置參數。
遠端連接配接資料庫:
mysql –uroot –p ‘password’ –P 3307 –h 10.1.1.21
檢視mysql現在已提供什麼存儲引擎:
mysql> show engines;
看你的mysql目前預設的存儲引擎:
mysql> show variables like '%storage_engine%';
你要看某個表用了什麼引擎(在顯示結果裡參數engine後面的就表示該表目前用的存儲引擎):
mysql> show create table 表名;
5. 重新整理mysql系統權限
flushprivileges;
showcreate databases oldboy \G;
6. 資料庫的備份
Mysqldump–u root –p ‘password’ oldboy(資料庫名)>/backup/$(date+%F).sql
恢複:注意如果沒有要恢複的資料庫要先建立資料庫
Createdatabase oldboy
Mysql –uroot –p ‘password’ oldboy</backup/2016.sql
Mysqldump–u root –p ‘password’ –B oldboy>/backup/$(date +%F).sql
加-B恢複資料時不需要重新建立資料庫。
壓縮備份:
指定字元集備份:
Mysqldump–u root –p ‘password’ –default-character-set=gbk –B oldboy |gzip </backup/$(date+%F).sql.gz
備份多個資料庫:
Mysqldump–u root –p ‘password’ –B mysql oldboy |gzip </backup/$(date +%F).sql.gz
分庫備份:
Mysqldump–u root –p ‘password’ –B mysql |gzip </backup/mysql_$(date +%F).sql.gz
Mysqldump–u root –p ‘password’ –B oldboy |gzip </backup/oldboy_$(date +%F).sql.gz
備份單個表:
Mysql –uroot –p ‘password’ mysql mysql-table|gzip </backup/mysql_$(date +%F).sql.gz
備份多個表:
mysql –uroot –p ‘password’ mysql 表名1 表名字2 |gzip </backup/mysql_$(date+%F).sql.gz
分表備份:
mysql –uroot –p ‘password’ mysql 表1 |gzip </backup/表1_$(date +%F).sql.gz
備份資料庫的結構:
mysql –uroot –p ‘password’ –d mysql |gzip </backup/$(date+%F).sql.gz
gzip –dxxxxx.sql.gz 解壓檔案(注意,用gzip –d解壓時會把自動源檔案删掉)
2. ll –lrt 指令解釋:讓同名字的排列在一起顯示。
mysql –uroot –p ‘password’ –compact mysql |gzip </backup/$(date +%F).sql.gz
compact:過濾一些沒有用的注釋。測試時比較常用。
恢複資料庫
>Source備份資料庫名
>Sourcebackup.sql
master端腳本執行時,在flush read with lock 不能執行操作,此過程需要跳出mysql視窗。
mysql -u root-p'mysqlpassword' <<EOF
flush tables with readlock;
system mysql -u root-p'mysqlpassword' -e "show master status" >/tmp/mysql.log
system mysqldump -u root-p'mysqlpassword' -B darren > /tmp/$(date +%F).sql
EOF
發郵件提醒:
slave stop SQL_THREAD
MySQL從庫記錄binlog從庫做為備份伺服器時開啟
log-slave-update
log-bin=mysql-bin
expire_logs_days=7 <==find /data/ -typef –name “mysql-bin.000*” –mtime +7 | xargs rm –f
忽略庫同步參數
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
replicate-ignore-db=mysql 主從庫都配置這條才可以做到主從不同步mysql庫
binlog-do-db=xxx 同步指定的庫
replicate-do-db=xxx同步指定的庫。
主從複制不同的錯誤模拟:
當從庫中出現錯誤error的提示是sql線程為NO時隻需
1.stop slave
2.set global sql_slave_skip_counter =1
3.start slave
即可恢複同步狀态。
根據錯誤号跳過指定錯誤:
slave-skip-errors = 1032,1062
vi /usr/local/my.cnf 在配置檔案中修改。
也可以在啟動資料庫的時候添加—slave-skip-errors=all
更改mysql資料庫預設引擎
alter table student engine=myisam;
alter table student engine innodb;
主從同步,互為主從:
vi my.cnf
auto_increment_increment=2
auto_increment_offset=1
auto_increment_offset=2
-----------------------------------------------------------
find /xx -type f ! -name "file10" -exec rm -f {}\;
find /xx -type f ! -name "file10"|xargs rm-f 删除指定目錄下的所有檔案,保留一個指定檔案
---------------------------------------------------------------
find /tmp -mtime +7 -type f -name *.sh[ab] -exec rm -f {}\;
假如在一個目錄中保留最近7天的檔案,7天前的檔案自動删除
###################################################################################
#!/bin/sh
for dbname in oldboy1 oldboy2 oldboy3
do
mysqldump -u root -p'password' -F -B $dbname > /tmp/mysqlbackup/$dbname_$(date +%F).sql
done
#sh -X test.sh 大x的意思是執行的時候顯示執行過程,可用以腳本排錯。
#去庫名
#
for dbname in `mysql -u root -p'mysqlpassword' -e"show databases;" | sed '1,2d'`
###################################################
3306
3307
3308
3309
把回車變成空格
tr "\n" " "
3306 3307 3308 3309
####################################################
主從同步備份:
選擇在從庫上做備份
開啟binlog功能
執行slave stop SQL_THREAD;
然後備份mysqldump -u root -p'password' -B -F wordpress > /backup/$(date+%F).sql
增量備份就是全備之後的binglog日志。
執行slave start SQL_THREAD;
主從同步的情況下,從庫備份搞定!
#############################################################################
模拟錯誤删除資料庫的解決辦法:
首先確定資料庫有全備份(全備之後要重新整理binlog)。增量備份也要有。
然後網站出現故障。
這時要重新整理binlog目的是記錄現在重新整理的binlog到上次重新整理的binlog的内容,這段内容就是出現故障的關鍵。
mysqladmin -u root -p"password" flush-logs
cp -r /data/mysql-bin.0003 /backup/binlog/backup/
mysqlbinlog mysql-bin.00003 >bin.sql
檢視binlog找到其中的錯誤内容,然後删掉。
把全備恢複到資料庫,然後再把增量binlog恢複。
##################################################################
一主多從當機恢複步驟:
登入從庫show processlist檢視更新狀态。
選擇pos最大的為主庫。
mysql-bin001508
3023435
10.1.1.22
rep1
然後在每個從庫上執行stop slave io_thread;
show processlist;
直到看到has read all relay log;表示從庫更新都執行完畢。
在10.1.1.22上編輯:vi /etc/my.cnf
log-bin=mysqlbin #開啟binlog注釋掉log-slave-updatesread-only等
重新開機資料庫10.1.1.22:/etc/init.d/mysqld resart
stop slave
reset master
quit;
進入到資料庫目錄 删掉master-info relay-log.info
重新開機資料庫10.1.1.22: /etc/init.d/mysqld restart
########################################################
登入所有從庫
stop slave;
change master to master_host='10.1.1.22';//如果不同步就指定起始點。
start slave
show slave status\G
平時通路資料庫需要用域名就需要更改解析。
############################################################
所有資料庫中的所有表加鎖。在整體轉儲過程中通過全局讀鎖定來實作。該選項自動關閉
資料庫引擎為innodb時候備份時加上--single-transaction
資料庫引擎為myisam時候備份時加上--lock-tables。
-d 參數為指定庫
以時間為點處理
mysqlbinlog mysqlbin0001 --start-datetime=‘’--stop-datetime=‘’mysql-bin0009 -r time.sql
以位置為點處理
mysqlbinlog mysqlbin0001 --strt-position=753
#######################################################################################
mkdir -p /tmp/backup/$(date +%F)
mysqldump -u root -p'password' -F -B $dbname > /tmp/mysqlbackup/$(date +%F)/$dbname.sql
rsync -az /data/mysql-bin.00* /tmp/backup/$(date +%F)/
恢複:
mysql -u root -p'password' < /tmp/mysqlbackup/$(date+%F)/$dbname.sql
#######################################################################
建表:
create table student(
id int(4) not null primary key auto_increment,
name char(20) not null
);
---------------------------
int序号 (4)4行
char内容(20)最長20個字元
create table students(
sno int(10) not null comment '學号',
sname varchar(16) not null comment '姓名'
-----------------------------------------------
建立索引:
create table test(
name char(20) not null,
key `索引名`(`name`)
------------------------------------------------
primary key主鍵的意思是辨別唯一,比如學生的學号。
increment 自增長。
sesc student 檢視表結構。
show create table student \G 檢視表的基本要素。
show index from students 檢視索引,後面也可跟\G
alter table student add index index_name(name);添加索引;為name添加索引。
alter table student drop index index_name;删除索引
alter table student add primary key(ID);
alter table student drop primary key;
----------------------------------------------------
插入資料:
insert into student(id,name) values(001,'wangjia1');
insert into student(id,name)values(001,'wangjia1'),(002,'wangjia2');
查詢資料:
select * from student;
select * from student limit 2;
select * from student limit 0,2;
select * from student order by id limit 0,3;
select * from student where id=6;
select * from student where name='wangjia3';
select * from student where id=7 and name='wangjia';
select * from student where id=7 or name='wangjia';
select * from student where id<7 and id>3;
更新資料:
update student set name='oldboy' where id=1;
删除資料
delete from student where id=100;
在表中增删改字段
alter table student add sex char(4);
later table student add age char(4) after name;
更改表名:
rename table student to teach;
mysql -u root -p'mysqlpassword' <<EOF
flush tables with read lock;
system mysql -u root -p'mysqlpassword' -e "show masterstatus" >/tmp/mysql.log
system mysqldump -u root -p'mysqlpassword' -B darren >/tmp/$(date +%F).sql
本文轉自 王家東哥 51CTO部落格,原文連結:http://blog.51cto.com/xiaodongge/1901343