近日支持某項目甲方運維人員做了一些數據整合,項目基於MySQL數據庫,部署於客戶專用內網的Linux(CentOS 7.6)服務器,這里順便做一個MySQL常用基礎運維命令總結。
一、本地破解root密碼
由於當前數據庫提供給各子項目程序使用的賬戶僅具有特定庫的部分權限,不具備創建新用戶,授權、創建或刪除庫的權限。且原運維人員離職,未交接root賬戶密碼。現運維需創建新用戶新庫等,以支持數據脫敏工作。總之,需要更高權限,只好本地破解root賬戶的密碼。
Step1/4,停止數據庫服務
killall -TERM mysqld
Step2/4,編輯數據庫配置文件
vim /etc/my.cnf
在mysqld節添加 skip-grant-tables 。
Step3/4,啟動數據庫服務
systemctl restart mysqld.service
這一步遇到一個小問題,數據庫啟動失敗,根據提示查看報錯信息,是數據庫日志文件沒有訪問權限,反復確認了日志文件權限配置為 640,mysql,mysql 是沒有問題的,最后發現是其所在文件夾權限不對,不知為何被改成了644,修改為755后成功啟動數據庫服務。
Step4/4,Root賬戶登錄修改密碼
mysql -uroot -hlocalhost
1 use mysql ; 2 update user set authentication_string=password('newPassword') where user='root'; 3 flush privileges ; 4 quit
如此便完成了root賬戶的密碼修改,然后應關閉數據庫服務,將數據庫配置還原后再重啟數據庫服務。需要注意的是,破解操作期間應關閉數據庫服務器網絡確保安全。
二、常用查看語句
查看數據庫版本。
select version();
查看某項配置,如連接數設置。
show variables like '%max_connections%';
查看當前連接信息。
show full processlist;
查看當前登錄用戶。
select user();
查看數據庫列表。
show databases;
查看所有庫表,需先切換庫。
show tables;
查看某個表結構。
desc tablename;
查看數據庫用戶列表。
select distinct concat('User: ''',user,'''@''',host,''';') as query from mysql.user order by query;
查看某用戶的權限。
show grants for 'username'@'%';
三、常用創建及授權語句
root登錄數據庫。
mysql -uroot -p -hlocalhost
創建數據庫db_test1。
create database db_test1 default charset utf8mb4 collate utf8mb4_general_ci;
創建用戶,命令格式為:
create user 'username'@'host' identified by 'password';
其中 host 參數指定該用戶在哪個主機上可以登陸,可以指定IP,如果是本地用戶可用localhost,如果想讓該用戶可以從任意遠程主機登陸,可以使用通配符%。
其中 password 參數為該用戶的登陸密碼,如果為空則該用戶可以不需要密碼登陸服務器。
舉例,創建數據庫新用戶db_user1,可遠程登錄。
create user 'db_user1'@'%' identified by 'Abcd@1234';
為用戶授權,命令格式為:
grant privileges on databasename.tablename to 'username'@'host' with grant option;
其中 privileges 參數指定用戶的操作權限,如select,insert,update,delete等,如果要授予所有的權限則使用all。
其中 databasename 參數指定數據庫名, tablename 參數指定數據庫表名,通配符*表示所有。
其中最后的 with grant option 表示此用戶可以將權限授權給其它用戶。
舉例,為db_user1授權全部權限。
grant all privileges on *.* to db_user1@"%" with grant option;
撤銷用戶權限,命令格式為:
revoke privilege on databasename.tablename from 'username'@'host';
舉例,撤銷db_user1對數據庫db_test1的刪除權限。
revoke delete on db_test1.* from 'db_user1'@'%';
完成權限操作后需執行 flush privileges ; 。
刪除用戶,命令格式為:
drop user 'username'@'host';
刪除數據庫,命令格式為:
drop database databasename;
四、備份還原及執行SQL文件等
mysqldump -u username -p databasename > /tmp/bak/databasebak.sql
增加 --opt -d,僅備份數據庫結構;
增加 -R 參數,可以導出存儲過程及自定義函數;
增加 -E 參數,可以導出事件。
還原數據庫,命令格式同執行sql文件:
mysql -u username -p databasename < /tmp/bak/databasebak.sql
執行SQL文件,命令格式為:
mysql -u username -p databasename < /tmp/1.sql
也可以登錄並切換至目標庫后,使用命令 source /tmp/1.sql 執行sql文件。
兩者的區別是使用source命令執行遇到報錯不會中止,而使用<執行遇到報錯會中止,所以推薦使用<的方式。
使用pager將sql執行結果重定向輸出到文件,pager是MySQL的一項強大且易用的功能,用法豐富,比如有時需要專網運維在內網幫忙查詢生產數據,查詢后拍照傳遞結果,當查詢結果數據量稍大時很不方便,這種情況就可以用pager功能將查詢結果重定向輸出到文件中再發送郵件,避免了Linux系統編碼問題、ssh終端編碼問題、手機拍照不清晰、多屏內容拍不全等問題。
pager cat > /tmp/1.log
五、配置文件
Centos 7中 MySQL 配置文件位置確認,使用命令:
ps aux|grep mysql|grep 'my.cnf'
如果沒有輸出內容則是使用默認配置位置。
默認 my.cnf 配置文件的位置,使用命令查看:
mysql --help|grep 'my.cnf'
輸出結果為:
/etc/my.cnf、/etc/mysql/my.cnf、 /usr/local/etc/my.cnf、 ~/.my.cnf
順序排前的優先。
下面附一份配置文件 cat /etc/my.cnf :

[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 log-error=/var/log/mysql/mysqld.log pid-file=/var/run/mysqld/mysqld.pid sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' character_set_server=utf8mb4 default-time_zone = '+8:00' log_timestamps = SYSTEM explicit_defaults_for_timestamp=off # 應用兼容問題,不能開啟 slow_query_log=1 slow_query_log_file=/var/log/mysql/mysqld-slow.log long_query_time=1 server-id=1 #只對serverid 配置 skip-name-resolve open_files_limit=65535 table_open_cache=2048 table_open_cache_instances=1 # log-bin=/data/mysql-binlog/mysql-bin # 開啟binlog,主庫開啟,從庫不開啟。 # relay-log=relay-bin # 從庫開啟中繼日志,主庫不開啟。 # expire_logs_days = 30 # 過期binlog天數,優化binlog磁盤占用,看情況開啟。 # binlog-ignore-db=mysql # 忽略的數據庫,一般不選擇。 binlog_cache_size = 4M key_buffer_size = 128M read_buffer_size = 32M max_connections=10240 max_allowed_packet=50M #read_only=1 #從庫只讀開啟 [client] host=mysqlserverip user=test password="Abcd@1234" [mysqldump] host=mysqlserverip user=test password="Abcd@1234"