1. 程式人生 > 實用技巧 >MySQL運維總結

MySQL運維總結

近日支援某專案甲方運維人員做了一些資料整合,專案基於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_test1default 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';

四、

-

五、附配置

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"
View Code