整理了一下,工做中用到的最高的關於mysql的一些命令和使用技巧,分享給剛接觸mysql的小夥伴麼。mysql
建議新人安裝mysql直接使用yum安裝便可,大牛們已經對其優化的差很少了,真正玩牛了再搞源碼安裝:linux
yum -y install mysql mysql-server mysql-devel
注意,若是是centos庫和有些國內yum源的mysql版本都比較低,若是想要安裝高版本mysql,須要換源,具體操做以下:sql
rpm -ivhhttp://rpms.famillecollet.com/enterprise/remi-release-6.rpm rpm--import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi yum--enablerepo=remi update mysql mysql-server mysql-devel
必定要注意,將mysql服務設置爲開機自啓動:shell
chkconfigmysqld on數據庫
1. shell命令行:mysqladmin -uroot -ppassword 'new_password' 2. mysql命令行:upload mysql.user set password=password("new_passwd")where user="root" and host="localhost";
1. 帳號受權:grant all privileges on *.* to user_name@'%' identified by '1234'; 2. 權限回收:revoke GRANT ALL PRIVILEGESON *.* from 'user_name'@'%';
這個只屬於新手用的命令,更詳細的會在下文中詳細介紹apache
showvariables like "%char%";
SETcharacter_set_client='utf8'; SETcharacter_set_connection='utf8'; SETcharacter_set_results='utf8';
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql #Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 collation-server= utf8_unicode_ci init-connect='SETNAMES utf8' character-set-server= utf8 lower_case_table_names=1 #數據庫代表大小寫忽略 log-bin=mysql-bin binlog-format=mixed #修改接收數據包大小 max_allowed_packet= 20M #打開慢查詢日誌 long_query_time= 1 log-queries-not-using-indexes log-slow-admin-statements log-slow-queries= /var/lib/mysql/slow-queries.log
mysqld_safe--skip-grant-tables &
updatemysql.user set password=PASSWORD('root') where User='root'; flush privileges;
SETFOREIGN_KEY_CHECKS=0;
truncate table tables_name;
mysql-uroot -proot -e 'use qhfax;show tables'
#!/bin/sh for i in `mysql -uroot -proot -e 'useqhfax;show tables'` do COUNT=`mysql-uroot -proot -e "select count(*) from $i"` echo"$i $COUNT" done
檢查selinux是否啓動,若是啓動數據再也不mysql權限內沒法建立 windows
主:centos
vi /etc/my.cn server-id=1 #給服務器起一個獨特的ID log-bin=mysql-bin #申明2進制日誌的文件爲mysql-bin.xxx binlog-format=mixed #二進制格式 mixed[由系統根據語句決定]/row[2進制記錄磁盤變化]/statement[2進制記錄執行語句]
受權:bash
grant replication client,replication slaveon *.* to'repl'@'192.168.85.%' identified by 'repl'; flush privileges;
vi /etc/my.cnf server-id=2 log-bin=mysql-bin binlog-format=mixed relay-log=mysql-relay #從服務器本身產生日誌
change master to master_host='192.168.85.111', master_user='repl', master_password='repl', master_log_file='mysql-bin.000001', master_log_pos=98; start slave; show master status; show slave status; reset master; reset slave;
create temporary tables 建立零時表權限 show view 查看視圖
本文實例,運行於 MySQL5.0 及以上版本。服務器
MySQL 賦予用戶權限命令的簡單格式可歸納爲:
grant 權限 on 數據庫對象 to 用戶
grant select on testdb.* to common_user@'%' grant insert on testdb.* to common_user@'%' grant update on testdb.* to common_user@'%' grant delete on testdb.* to common_user@'%'
或者,用一條 MySQL 命令來替代:
grant select, insert, update, delete ontestdb.* to common_user@'%'
grant 建立、修改、刪除 MySQL 數據表結構權限。
grant create on testdb.* todeveloper@'192.168.0.%'; grant alter on testdb.* to developer@'192.168.0.%'; grant drop on testdb.* to developer@'192.168.0.%';
grant 操做 MySQL 外鍵權限。
grant references on testdb.* todeveloper@'192.168.0.%'
grant 操做 MySQL 臨時表權限。
grant create temporary tables on testdb.*to developer@'192.168.0.%';
grant 操做 MySQL 索引權限。
grant index on testdb.* to developer@'192.168.0.%';
grant 操做 MySQL 視圖、查看視圖源代碼 權限。
grant create view on testdb.* todeveloper@'192.168.0.%'; grant show view on testdb.* to developer@'192.168.0.%';
grant 操做 MySQL 存儲過程、函數 權限。
grant create routine on testdb.* to developer@'192.168.0.%'; -- now, can show procedure status grant alter routine on testdb.* to developer@'192.168.0.%'; -- now, you can drop a procedure grant execute on testdb.* to developer@'192.168.0.%';
grant all privileges on testdb todba@'localhost'
其中,關鍵字 「privileges」 能夠省略。
grant all on *.* to dba@'localhost'
grant select on *.* to dba@localhost; --dba 能夠查詢 MySQL 中全部數據庫中的表。 grant all on *.* to dba@localhost; -- dba 能夠管理 MySQL 中的全部數據庫
1) grant 做用在單個數據庫上: grant select on testdb.* to dba@localhost;-- dba 能夠查詢 testdb 中的表。 2) grant 做用在單個數據表上: grant select, insert, update, delete ontestdb.orders to dba@localhost; 3) grant 做用在表中的列上: grant select(id, se, rank) ontestdb.apache_log to dba@localhost; 4) grant 做用在存儲過程、函數上: grant execute on procedure testdb.pr_add to'dba'@'localhost' grant execute on function testdb.fn_add to 'dba'@'localhost'
查看當前用戶(本身)權限: show grants; 查看其餘 MySQL 用戶權限: show grants for dba@localhost;
revoke 跟 grant 的語法差很少,只須要把關鍵字「to」換成 「from」 便可:
grant all on *.* to dba@localhost; revoke all on *.* from dba@localhost;
2. 若是想讓受權的用戶,也能夠將這些權限 grant 給其餘用戶,須要選項 「grant option「
grant select on testdb.* to dba@localhostwith grant option;
這個特性通常用不到。實際中,數據庫權限最好由 DBA 來統一管理。
#查看grant添加的用戶:selectuser,host from mysql.user;
#刪除用戶:
mysql> drop user"tongor"@localhost;
即時賦予一個用戶,執行存儲過程的權限,普通用戶執行非他本身建立的存儲過程仍是會失敗
execute command denied to user'test_ryd'@'%' for routine 'test_04.generate_serialno' The user specified as a definer('user_admin'@'%') does not exist
可是提示存儲過程定義中的definer不存在,原來僅僅是鏈接到MySQL服務器的用戶具備執行存儲過程的權限是遠遠不夠的,最終要經過存儲過程定義中指定的definer來執行存儲過程。
解決:mysql_upgrade -u root -p
知識:mysql_upgrade升級受權表
解決:SQL語句過長,建議改語句
知識:insert執行語句過長形成的
【錯誤過程】:MySQL從5.1升級至5.5後在調用存儲過程時報出「Cannotload from mysql.proc. The table is probably corrupted。」 【形成緣由】:MySQL升級完成後未對相關數據庫執行升級. 【解決辦法】:在命令行中執行mysql_upgrade-uroot -p 便可~
showVARIABLES like '%max_allowed_packet%'; 能夠編輯my.cnf來修改(windows下my.ini),在[mysqld]段或者mysql的server配置段進行修改。 max_allowed_packet = 20M set global max_allowed_packet = 2*1024*1024*10 show VARIABLES like '%max_allowed_packet%';
mysql_upgrade-u root -proot --force
解決:mysql_upgrade -uroot -proot--force 知識點:低版本mysql向高版本遷移的時候,存儲過程問題
方法一:忽略錯誤後,繼續同步 該方法適用於主從庫數據相差不大,或者要求數據能夠不徹底統一的狀況,數據要求不嚴格的狀況 解決: stop slave; #表示跳過一步錯誤,後面的數字可變 set global sql_slave_skip_counter =1; start slave; 以後再用mysql>show slave status\G 查看: Slave_IO_Running: Yes Slave_SQL_Running: Yes ok,如今主從同步狀態正常了。。。