1. 下載
https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.20-winx64.zipmysql
2. 解壓到特定目錄
本例中解壓到C:\UserDefined\mysql-5.7.20-winx64算法
3. 準備my.ini
建立目錄C:\UserDefined\mysql-5.7.20-winx64\conf,並在該目錄下建立文件my.ini:sql
[mysql] # 設置mysql客戶端默認字符集 default-character-set=utf8 #[client] ## 設置mysql客戶端鏈接服務端時默認使用的端口 #port=3306 #default-character-set=utf8 [mysqld] # 設置3306端口 port=3306 # 設置mysql的安裝目錄 basedir=C:\\UserDefined\\mysql-5.7.20-winx64 # 設置mysql數據庫的數據的存放目錄 datadir=C:\\UserDefined\\mysql-5.7.20-winx64\\data # 容許最大鏈接數 max_connections=200 # 容許鏈接失敗的次數。 max_connect_errors=10 # 服務端使用的字符集默認爲UTF8 character-set-server=utf8 # 建立新表時將使用的默認存儲引擎 default-storage-engine=INNODB # 默認使用「mysql_native_password」插件認證 #mysql_native_password default_authentication_plugin=mysql_native_password ##如下設置開啓能夠無密碼登陸mysql,一般用於密碼設置及權限管理 #skip-grant-tables
4. 初始化並安裝系統服務
4.1 初始化
C:\UserDefined\mysql-5.7.20-winx64\bin\mysqld.exe --initialize --defaults-file=C:\UserDefined\mysql-5.7.20-winx64\conf\my.ini
注意:數據庫
1. 使用 --initialize 是會隨機生成一個mysql root帳戶的密碼,在啓動後,須要使用無密碼模式進去,設置root密碼,纔可使用;若是想查看隨機生成的密碼,能夠在data目錄下,用文本編輯軟件(如記事本)打開*.err文件,便可看到隨機生成的root密碼windows
2. 若是想生成空的root密碼,可使用模式 --initialize-insecure,此時會生成一個空的root密碼,即無密碼模式登陸,客戶端可使用mysql -h 127.0.0.1 -uroot登陸緩存
C:\UserDefined\mysql-5.7.20-winx64\bin\mysqld.exe --initialize-insecure --defaults-file=C:\UserDefined\mysql-5.7.20-winx64\conf\my.ini
4.2 安裝系統服務
C:\UserDefined\mysql-5.7.20-winx64\bin\mysqld.exe install MYSQL5720 --defaults-file=C:\UserDefined\mysql-5.7.20-winx64\conf\my.ini
其中註冊的windows服務名稱爲MYSQL5720服務器
執行完成後,顯示Service successfully installed. 則表明已經安裝完成併發
此時,打開windows服務列表,應該能夠看到註冊的windows服務socket
若是想刪除windows服務,能夠用管理員身份打開cmd,並執行下面命令進行刪除ide
sc delete MYSQL5720
若是想啓動mysql windows服務,能夠在命令行鍵入
rem 啓動mysql windows服務 net start MYSQL5720 rem 中止mysql windows服務 net stop MYSQL5720 rem 刪除mysql windows服務 sc delete MYSQL5720
5. 客戶端登錄mysql
5.1. 無密碼模式登陸
若是使用的是--initialize 模式初始化的mysql,忘記了root的密碼,此時須要用無密碼模式登陸mysql,並修改設置root的密碼,方法爲。
5.1.1 修改my.ini
在my.ini文件[mysqld]下面添加skip-grant-tables,而後重啓mysqld windows服務
5.1.2 mysql客戶端登錄
mysql -h 127.0.0.1 -uroot
5.1.3 修改root密碼
ALTER USER 'root'@'localhost'IDENTIFIED BY 'root'; ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
若是出現下面錯誤:
mysql> ALTER USER 'root'@'localhost'IDENTIFIED BY 'root'; ERROR 1290 (HY000): Unknown error 1290
這是由於mysql正在MySQL正使用%s選項運行,所以不能執行該語句,要先執行
flush privileges;
注:
也可以使用下面方法來設置root用戶的密碼
use mysql; update mysql.user set authtntication_string=password('root') where user='root'; flush privileges;
5.1.4 重置my.ini並重啓mysql windows 服務
修改my.ini,把skip-grant-tables註釋掉,並重啓mysql服務
5.2 經過mysql客戶端使用mysql服務
在5.1 步驟作好以後,便可用過mysql客戶端正常使用mysql服務了!!若是在5.1中是經過
use mysql; update mysql.user set authtntication_string=password('root') where user='root'; flush privileges;
方式來設置root用戶密碼的,在客戶端執行命令時均可能會遇到錯誤
ERROR 1820 (HY000): Unknown error 1820
該錯誤的含義是:ERROR 1820 (HY000): You must SET PASSWORD before executing this statement,即要先修改密碼後才能正常使用數據庫,此時修改一下root用戶的密碼便可,可經過下面sql中任意一條執行便可
SET PASSWORD = PASSWORD('root'); --ALTER USER 'root'@'localhost'IDENTIFIED BY 'root'; ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; flush privileges;
補充:
mysql何時須要flush privileges?
flush privileges 命令本質上的做用是將當前user和privilige表中的用戶信息/權限設置從mysql庫(MySQL數據庫的內置庫)中提取到內存裏。MySQL用戶數據和權限有修改後,但願在"不重啓MySQL服務"的狀況下直接生效,那麼就須要執行這個命令。一般是在修改ROOT賬號的設置後,怕重啓後沒法再登陸進來,那麼直接flush以後就能夠看權限設置是否生效。而沒必要冒太大風險。
附:mysqld命令介紹
mysqld --verbose --help 顯示服務器選項和可配置變量一覽
從配置文件[mysqld][server]組讀取信息
-? //--help 查看簡短幫助信息
--ansi //使用標準ANSI,SQL語法
-b //--basedir mysql安裝目錄
--big-tables //保存大的結果集到臨時文件
--bind-address //服務器要監聽的IP地址格式
--binlog-format //ROW|STATEMENT|MIXED 二進制日誌格式
--character-sets-dirs //字符集安裝目錄
--character-set-client-handshake //不忽略客戶端發送的字符集信息 --skip-character-set-client-handshake
--character-set-filesystem //字符集文件系統
-C//--character-set-server 服務器字符集
-r //--chroot mysqld運行前,運行chroot系統調用
--collation-server //排序服務器字符集
--console //寫錯誤日誌到console window平臺
--core-file //當mysql宕機時,寫core文件 --core-file-size
-h //--datadir 數據文件目錄
--default-storage-engine //默認存儲引擎
--default-time-zone //默認時區
--defaults-extra-file //額外配置文件
--defaults-file //默認配置文件
--defaults-group-suffix //配置組名後綴
--enable-named-pipe //啓用命名管道 window平臺
--event-schedule //啓動event功能
--flush //刷新改變到磁盤
--general-log //0|1 查詢日誌
--initialize //建立數據文件目錄和mysql系統數據庫 產生隨機root密碼
--initialize-insecure //建立數據文件目錄和mysql系統數據庫 產生空root密碼
--init-file //初始化後要執行的文件
--install //安裝mysqld做爲window服務 自動啓動
--install-manual //安裝mysqld做爲window服務 手動啓動
--lc-message //錯誤消息的語言
--lc-message-dir //錯誤消息的目錄
--local-service //啓動mysqld的帳號 window平臺
--log-error //寫錯誤日誌的文件名
--log-output //FILE|TABLE|NONE 查詢日誌和慢查詢日誌的輸出類型
--log-raw // 日誌記錄完整的信息,包含密碼
--log-short-format //記錄更少的信息到慢查詢日誌
--log-tc //內存映射事務協調日誌文件名
--log-tc-size //內存映射事務協調日誌文件大小
--no-defaults //不讀取配置文件
--open-files-limit //打開文件的數量限制
--pid-file //進程ID文件名
--plugin-xxx //服務器插件
--plugin-load //告訴服務器啓動時加載的插件
--plugin-load-add //告訴服務器啓動時加載的插件
--port //端口號
--port-open-timeout //等待端口號可用時間
--print-defaults //從配置文件讀出的選項
--remove //刪除window服務
--safe-user-create //除非有mysql.user表的insert權限,不然不能夠建立用戶
--secure-file-priv //限制導入導出操做
--shared-memory //在window平臺,使用共享內存鏈接
--shared-memory-base-name //共享內存名字
--skip-event-scheduler //關閉事件觸發功能
--skip-grant-tables //服務器啓動時跳過權限表
--skip-host-cache //爲了主機到IP轉換,服務器執行DNS尋找
--skip-name-resolve //當檢查客戶端鏈接時,不解析主機名
--skip-networking //不監聽TCP/IP鏈接
--standalone //在window平臺,不做爲服務啓動
--skip-show-database //不容許SHOW DATABASES
--slow-query-log //0|1 是否開啓慢查詢
--slow-start-timeout //window服務開啓的超時時間
--socket //unix的socket文件
--sql-mode //
ALLOW_INVALID_DATES
ANSI_QUOTES
ERROR_FOR_DIVISION_BY_ZERO
HIGH_NOT_PRECEDENCE
IGNORE_SPACE
NO_AUTO_CREATE_USER
NO_AUTO_VALUE_ON_ZERO
NO_BACKSLASH_ESCAPES
NO_DIR_IN_CREATE
NO_ENGINE_SUBSTITUTION
NO_FIELD_OPTIONS
NO_KEY_OPTIONS
NO_TABLE_OPTIONS
NO_UNSIGNED_SUBTRACTION
NO_ZERO_DATE
NO_ZERO_IN_DATE
ONLY_FULL_GROUP_BY
PAD_CHAR_TO_FULL_LENGTH
PIPES_AS_CONCAT
REAL_AS_FLOAT
STRICT_ALL_TABLES
STRICT_TRANS_TABLES
--sysdate-is-now //返回sql開始執行的時間
--transaction-isolation //
READ-UNCOMMITTED
READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE
--transaction-read-only //設置只讀事物模式
-t //--tmpdir 臨時文件目錄
-u //--user 以某個系統用戶啓動服務器
-v //--verbose 顯示詳細幫助
-V //--version 顯示版本
全局變量
經過SET命令設置
autocommit //事務自動提交
back_log //鏈接監聽隊列的大小
default_password_lifetime //密碼過時時間
disconnect_on_expired_password //密碼過時時的處理
expire_logs_days //二進制日誌的過時時間
flush //每一個sql執行後當即刷新結果到磁盤
flush_time //刷新緩存時間
foreign_key_checks //外鍵檢查
have_compress //是否可使用 COMPRESS()
and UNCOMPRESS()
have_geometry //是否支持地理信息類型
have_dynamic_loading //是否能夠動態加載插件
have_openssl //have_ssl 是否支持ssl鏈接
have_profiling //是否能夠顯示sql語句執行時使用的資源
have_statement_timeout //sql語句執行超時
have_symlink //是否支持符號鏈接
identity //last_insert_id
init_connect //客戶端鏈接後默認執行的sql語句
init_file //服務器開始後默認執行的sql文件
insert_id //當插入自動增加列類型時,insert要使用的值
interactive_timeout //交互式鏈接的超時時間
internal_tmp_disk_storage_engine //臨時表的存儲引擎
join_buffer_size //
local_infile //是否能夠運行LOAD_DATA_LOCAL
lock_wait_timeout //鎖超時時間
locked_in_memory //是否把mysqld鎖在內存
log_timestamps //日誌時區
log_error_verbosity //是否顯示更多信息到日誌
long_query_time //慢查詢時間
max_allow_packet //每一個報文的最大大小
max_connect_errors //最大不成功鏈接,到達後將阻塞
max_connections //最大併發鏈接數
max_digest_length //sql運行摘要的最大字節數
max_error_count //被SHOW ERRORS和SHOW WARNINGS語句顯示的最大數量
max_execution_time //select語句的超時時間
max_heap_table_size//用戶建立的內存表的最大大小
max_join_size//語句最大的行或行聯合
max_length_for_sort_data //決定使用filesort算法的索引值大小
max_prepared_stmt_count //最大預編譯語句數量
max_relay_log_size//最大複製relay日誌大小
max_seeks_for_key //索引掃描的最大數
max_sort_length //排序數據的字節數
max_sp_recursion_depth//存儲過程的遞歸深度
max_user_connections//同時鏈接的mysql用戶數
max_write_lock_count//執行最大數量寫鎖後,能夠執行待執行的讀鎖
min_examined_row_limit//查詢記錄少於這個,不記錄到慢查詢日誌
net_buffer_length//鏈接和結果緩存的初始大小
net_read_timeout //服務器讀超時
net_retry_timeout//服務器讀寫重試超時
net_write_timeout//服務器寫超時