数据库高级知识——mysql架构介绍(一)
生活随笔
收集整理的這篇文章主要介紹了
数据库高级知识——mysql架构介绍(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1.MySQL簡介
- 1.1 概述
- 1.2 Mysql高級
- 2.Mysql Linux版的安裝
- 2.1 MySQL下載官網
- 2.2 安裝與卸載
- 2.3 查看MySQL安裝版本
- 2.4 mysql服務的啟+停
- 2.5 登錄mysql
- 2.6 設置開機自啟動
- 2.7 MySQL相關文件
- 2.8 修改字符集
- 3.Mysql配置文件
- 3.1二進制日志log-bin
- 3.2 錯誤日志log-error
- 3.3 慢查詢日志log
- 4.Mysql 的用戶與權限管理
- 4.1 MySQL的用戶管理
- 4.2 權限管理
1.MySQL簡介
1.1 概述
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB公司開發,目前屬于Oracle公司。 MySQL是一種關聯數據庫管理系統,將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。Mysql是開源的,所以你不需要支付額外的費用。 Mysql是可以定制的,采用了GPL協議,你可以修改源碼來開發自己的Mysql系統。Mysql支持大型的數據庫。可以處理擁有上千萬條記錄的大型數據庫。 MySQL使用標準的SQL數據語言形式。 Mysql可以允許于多個系統上,并且支持多種語言。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。 MySQL支持大型數據庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB,64位系統支持最大的表文件為8TB。1.2 Mysql高級
數據庫內部結構和原理 數據庫建模優化 數據庫索引建立 SQL語句優化 SQL編程 mysql服務器的安裝配置 數據庫的性能監控分析與系統優化 各種參數常量設定 主從復制 分布式架構搭建、垂直切割和水平切割 數據遷移 容災備份和恢復 shell或python等腳本語言開發 對開源數據庫進行二次開發2.Mysql Linux版的安裝
Ubuntu20.04+MySQL8.0.252.1 MySQL下載官網
MySQL linux版
2.2 安裝與卸載
安裝:
MySQL安裝
卸載:
參考1
參考2
2.3 查看MySQL安裝版本
或者可以執行 mysqladmin --version命令,類似java -version如果打出消息,即為成功。 通過vim 查看 mysql組 和mysql組2.4 mysql服務的啟+停
啟動:
關閉:
查看MySQL狀態:
2.5 登錄mysql
切換到root用戶,使用root用戶可以不用密碼直接登錄 root@zhaoxr-ThinkPad-E450:/home/zhaoxr/mysql# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>2.6 設置開機自啟動
設置開機自啟動:
sudo update-rc.d -f mysql defaults關閉開機自啟動:
sudo update-rc.d -f mysql remove查看MySQL狀態:
sudo service mysql status2.7 MySQL相關文件
| /usr/bin | 客戶端程序和mysql_install_db |
| /var/lib/mysql | 數據庫和日志文件 |
| /var/run/mysqld | 服務器 |
| /etc/mysql | 配置文件my.cnf |
| /usr/share/mysql | 字符集,基準程序和錯誤消息 |
| /etc/init.d/mysql | 啟動mysql服務器 |
2.8 修改字符集
查看字符集
show variables like '%char%'; show variables like '%char%'; mysql> show variables like 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8mb3 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.01 sec)mysql> show variables like '%char%'; +--------------------------------------+----------------------------+ | Variable_name | Value | +--------------------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8mb3 | | character_sets_dir | /usr/share/mysql/charsets/ | | validate_password.special_char_count | 1 | +--------------------------------------+----------------------------+ 9 rows in set (0.00 sec)修改
3.Mysql配置文件
Ubuntu20.04+MySQL8.0.25的配置文件 /etc/mysql /etc/mysql/mysql.conf.d root@zhaoxr-ThinkPad-E450:/etc/mysql/mysql.conf.d# cat mysqld.cnf # # The MySQL database server configuration file. # # One can use all long options that the program supports. # Run program with --help to get a list of available options and with # --print-defaults to see which it would actually understand and use. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html# Here is entries for some specific programs # The following values assume you have at least 32M ram[mysqld] # # * Basic Settings # user = mysql # pid-file = /var/run/mysqld/mysqld.pid # socket = /var/run/mysqld/mysqld.sock # port = 3306 # datadir = /var/lib/mysql# If MySQL is running as a replication slave, this should be # changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir # tmpdir = /tmp # # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1 mysqlx-bind-address = 127.0.0.1 # # * Fine Tuning # key_buffer_size = 16M # max_allowed_packet = 64M # thread_stack = 256K# thread_cache_size = -1# This replaces the startup script and checks MyISAM tables if needed # the first time they are touched myisam-recover-options = BACKUP# max_connections = 151# table_open_cache = 4000# # * Logging and Replication # # Both location gets rotated by the cronjob. # # Log all queries # Be aware that this log type is a performance killer. # general_log_file = /var/log/mysql/query.log # general_log = 1 # # Error log - should be very few entries. # log_error = /var/log/mysql/error.log # # Here you can see queries with especially long duration # slow_query_log = 1 # slow_query_log_file = /var/log/mysql/mysql-slow.log # long_query_time = 2 # log-queries-not-using-indexes # # The following can be used as easy to replay backup logs or for replication. # note: if you are setting up a replication slave, see README.Debian about # other settings you may need to change. # server-id = 1 # log_bin = /var/log/mysql/mysql-bin.log # binlog_expire_logs_seconds = 2592000 max_binlog_size = 100M # binlog_do_db = include_database_name # binlog_ignore_db = include_database_name3.1二進制日志log-bin
log_bin = /var/log/mysql/mysql-bin.log log-bin 中存放了所有的操作記錄(寫?),可以用于恢復。相當于 Redis 中的 AOF log-bin配置(默認關閉)3.2 錯誤日志log-error
log_error = /var/log/mysql/error.log默認是打開的,記錄嚴重的警告和錯誤信息,每次啟動和關閉的詳細信息等。
3.3 慢查詢日志log
slow_query_log_file = /var/log/mysql/mysql-slow.log 默認關閉,記錄查詢的sql語句,如果開啟會減低mysql的整體性能,因為記錄日志也是需要消耗系統資源的 可自定義“慢”的概念:0-10秒之間的一個數。 慢查詢日志會將超過這個查詢事件的查詢記錄下來,方便找到需要優化的 sql 。 用于優化sql語句是使用。4.Mysql 的用戶與權限管理
4.1 MySQL的用戶管理
查看密碼校驗規范:
mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | LOW | | validate_password.special_char_count | 1 | +--------------------------------------+-------+ 7 rows in set (0.00 sec) 各個密碼等級,可以設置的賬戶密碼如下所示:賬戶密碼設置規范
創建用戶:
mysql>create user zhang3 identified by '123123'; #表示創建名稱為zhang3的用戶,密碼設為123123;查看用戶:
mysql> select user, host, plugin, authentication_string from mysql.user; +------------------+-----------+-----------------------+------------------------------------------------------------------------+ | user | host | plugin | authentication_string | +------------------+-----------+-----------------------+------------------------------------------------------------------------+ | zhaoxr | % | caching_sha2_password | $A$005$^-~pbXT1[86`p3gH2nttGGHB5FpbQgt7TeCCDEMhUKJRZp.VDgqYZj9D | | debian-sys-maint | localhost | caching_sha2_password | $A$005$R UJ|`]!LfSpJ7Re9jW5ODzmiNgfyP/4ncIV73 | | mysql.infoschema | localhost | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | mysql.session | localhost | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | mysql.sys | localhost | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | root | localhost | auth_socket | | +------------------+-----------+-----------------------+------------------------------------------------------------------------+ 6 rows in set (0.00 sec) host : 表示連接類型% 表示所有遠程通過 TCP方式的連接IP 地址 如 (192.168.1.2,127.0.0.1) 通過制定ip地址進行的TCP方式的連接機器名 通過制定i網絡中的機器名進行的TCP方式的連接::1 IPv6的本地ip地址 等同于IPv4的 127.0.0.1localhost 本地方式通過命令行方式的連接 ,比如mysql -u xxx -p 123xxx 方式的連接。User:表示用戶名同一用戶通過不同方式鏈接的權限是不一樣的。刪除用戶
mysql> drop user li4 ;#刪除li4用戶4.2 權限管理
授予權限:
授權命令: grant 權限1,權限2,…權限n on 數據庫名稱.表名稱 to 用戶名@用戶地址 identified by ‘連接口令’; 該權限如果發現沒有該用戶,則會直接新建一個用戶。 比如 grant select,insert,delete,drop on atguigudb.* to li4@localhost ; 給li4用戶用本地命令行方式下,授予atguigudb這個庫下的所有表的插刪改查的權限。grant all privileges on *.* to joe@'%' [identified by '123']; 授予通過網絡方式登錄的的joe用戶 ,對所有庫所有表的全部權限,[密碼設為123]可以不用加. 就算 all privileges 了所有權限,grant_priv 權限也只有 root 才能擁有。給 root 賦連接口令 grant all privileges on *.* to root@'%' ;后新建的連接沒有密碼,需要設置密碼才能遠程連接。 update user set password=password('root') where user='root' and host='%';收回權限:
收回權限: revoke 權限1,權限2,…權限n on 數據庫名稱.表名稱 from 用戶名@用戶地址 ;REVOKE ALL PRIVILEGES ON mysql.* FROM joe@localhost; #若賦的全庫的表就 收回全庫全表的所有權限REVOKE select,insert,update,delete ON mysql.* FROM joe@localhost; #收回mysql庫下的所有表的插刪改查權限對比賦予權限的方法。必須用戶重新登錄后才能生效查看權限:
查看當前用戶權限 show grants;查看某用戶的全局權限 select * from user ;查看某用戶的某庫的權限 select * from db;查看某用戶的某個表的權限 select * from tables_priv;總結
以上是生活随笔為你收集整理的数据库高级知识——mysql架构介绍(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络(二)-性能指标
- 下一篇: MATLAB图自编码器