1、環境介紹
系統:centos6.5
軟件:mysql6.5(從官網下載版本時選擇Linux-Generic、X86-64bit)
2、安裝前系統檢查
2.1、SElinux和防火牆是否關閉
2.2、操作系統的限制
修改系統的軟硬限制,防止服務器的連接過多或表過多而出現打不開表或訪問不了表的現象(“too many open files”)和服務器跑多個實例時報(“resource temporarily unavailable”)的錯誤,表示沒有足夠資源。編輯/etc/security/limits.conf, 注意:修改完成候重啟系統才能生效
3、mysql數據安裝過程
3.1、創建mysql用戶,用戶組,解壓安裝包,給安裝包授權
1 #創建用戶及用戶組 2 groupadd mysql 3 useradd -g mysql mysql -s /sbin/nologin 4 5 #解壓安裝包至“/usr/local”下 6 tar -zxvf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz -C /usr/local 7 8 #做軟連接,方便日后升級 9 ln -s /usr/local/mysql-5.6.40-linux-glibc2.12-x86_64 /usr/local/mysql 10 11 #給mysql目錄授權 12 chown mysql.mysql -R /usr/local/mysql
3.2、創建數據庫的數據目錄並授權
1 #創建數據庫的數據目錄 2 mkdir -p /data/mysql 3 4 #授權 5 chown -R mysql.mysql /data/mysql
3.3、配置數據庫配置文件

vi /etc/my.cnf [client] port = 3306 socket = /tmp/mysql.sock default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] port = 3306 socket = /tmp/mysql.sock basedir = /usr/local/mysql datadir = /data/mysql open_files_limit = 65535 back_log = 103 max_connections = 512 max_connect_errors = 100000 table_open_cache = 512 external-locking = FALSE max_allowed_packet = 128M sort_buffer_size = 2M join_buffer_size = 2M thread_cache_size = 51 query_cache_size = 32M tmp_table_size = 96M max_heap_table_size = 96M slow_query_log = 1 slow_query_log_file = /data/mysql/slow.log log-error = /data/mysql/error.log long_query_time = 0.5 server-id = 1323306 log-bin = /data/mysql/mysql-bin sync_binlog = 1 binlog_cache_size = 4M max_binlog_cache_size = 128M max_binlog_size = 1024M expire_logs_days= 7 key_buffer_size = 32M read_buffer_size = 1M read_rnd_buffer_size = 16M bulk_insert_buffer_size = 64M character-set-server=utf8 default-storage-engine=InnoDB binlog_format=row interactive_timeout=300 wait_timeout=300 transaction_isolation = REPEATABLE-READ innodb_buffer_pool_size = 1434M innodb_data_file_path = ibdata1:1024M:autoextend innodb_flush_log_at_trx_commit = 1 innodb_log_buffer_size = 16M innodb_log_file_size = 256M innodb_log_files_in_group = 2 innodb_max_dirty_pages_pct = 50 innodb_file_per_table = 1 innodb_locks_unsafe_for_binlog = 0 [mysqldump] quick max_allowed_packet = 32M
3.4、初始化數據庫,一般情況下初始過程中出現兩個OK,證明初始化數據庫成功。
1 cd /usr/local/mysql/scripts 2 ./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --defaults-file=/etc/my.cnf --user=mysql
3.4、初始化數據庫完成后,啟動數據庫:
1 cd /usr/local/mysql/bin 2 ./mysqld_safe --defaults-file=/etc/my.cnf &
查看mysql進程,驗證是否啟動成功
3.5、創建數據庫密碼
1 #mysql安裝完成后,進入數據庫的方式是無密碼狀態,為保證數據庫安全,需給數據庫root用戶創建密碼 2 mysql>use mysql; 3 mysql>update user set password=password('root123') where user='root'; 4 mysql>flush privileges; 5 6 #安全加固,只保留數據庫中用戶為root,host為localhost的賬號。 7 mysql>delete from user where user != 'root' or host != 'localhost'; 8 mysql>flush privileges;
4、關閉mysql數據庫:
1 #正常關閉 2 shell>cd /usr/local/mysql/bin 3 shell>./mysqladmin -uroot -proot123 shutdown 4 5 #非正常關閉 6 shell>ps -ef|grep mysql 7 #查看mysql數據庫的進程ID,直接kill
至此,mysql數據庫安裝,啟動和關閉完成
5、額外學習
1 #進入mysql數據庫,通過show databases來查看當前數據庫有哪些 2 mysql> show databases; 3 +--------------------+ 4 | Database | 5 +--------------------+ 6 | information_schema | 7 | mysql | 8 | performance_schema | 9 | test | 10 +--------------------+ 11 4 rows in set (0.02 sec) 12 13 #我們主要了解一下information_schema和mysql庫 14 15 #information_schema在安裝mysql過程中的初始化階段自動生成,它提供了訪問數據庫中元數據的所有信息,里面存放着關於mysql服務器所有其它數據庫的信 息,如:數據庫名、數據庫里面的表、表數據類型和訪問權限等,但該庫是只讀庫,只能進行select操作,我們在information_schema中使用較多的表有: 16 * tables (記錄所有表的基本信息,訪問該表可收集表的統計信息) 17 * PROCESSLIST (查看當前數據庫的連接) 18 * GLOBAL_STATUS (查看數據庫運行的各種狀態) 19 * GLOBAL_VARIABLES (查看數據庫中的參數) 20 * PARTITIONS (數據庫中表分區的情況) 21 * INNODB_LOCKS、INNODB_TRX、INNODB_LOCK_WAITS 這三張表用來監控數據庫中的鎖情況 22 23 #mysql庫也是初始化過程中自動創建的,我們主要使用user表來管理數據庫中的用戶權限信息
6、補充:mysql5.7安裝與5.6的差異
6.1、mysql5.7安裝與之前版本唯一的差異是初始化數據庫哪一步,詳細介紹如下:
1 #添加組 2 groupadd mysql 3 #添加用戶 4 useradd -g mysql mysql -s /sbin/nologin 5 #解壓安裝包 6 tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C /usr/local 7 #創建軟連接 8 ln -s mysql-5.7.22-linux-glibc2.12-x86_64 mysql 9 #創建數據庫目錄 10 mkdir -p /data/mysql 11 #創建my.cnf 12 13 vi /etc/my.cnf 14 15 [client] 16 port = 3306 17 socket = /tmp/mysql.sock 18 [mysql] 19 prompt="\u@db \R:\m:\s [\d]> " 20 no-auto-rehash 21 [mysqld] 22 user = mysql 23 port = 3306 24 basedir = /usr/local/mysql 25 datadir = /data/mysql 26 socket = /tmp/mysql.sock 27 character-set-server = utf8mb4 28 skip_name_resolve = 1 29 open_files_limit = 65535 30 back_log = 1024 31 max_connections = 512 32 max_connect_errors = 1000000 33 table_open_cache = 1024 34 table_definition_cache = 1024 35 table_open_cache_instances = 64 36 thread_stack = 512k 37 external-locking = FALSE 38 max_allowed_packet = 32M 39 sort_buffer_size = 4M #用於sql語句在內存中的臨時排序 40 join_buffer_size = 4M #表連接使用,用於BKA。 41 thread_cache_size = 768 42 query_cache_size = 0 #query_cache 高速查詢緩存,在生產環境中建議關閉,‘0’為緩存數據大小為0, 43 query_cache_type = 0 #同上,和query_cache_size都是數據緩存的兩個核心參數,都要關閉。‘0’為關閉,‘1’為開啟(5.6以前的版本默認是關閉的) 44 interactive_timeout = 600 45 wait_timeout = 600 46 tmp_table_size = 32M #sql語句在排序或分組是沒有用到索引,就會使用臨時表空間 47 max_heap_table_size = 32M #管理heap,memory存儲引擎表 (建議將tmp_table_size和該參數設置成一樣的值,如果不一樣,按照最小的值來限制) 48 slow_query_log = 1 49 slow_query_log_file = /data/mysql/slow.log 50 log-error = /data/mysql/error.log 51 long_query_time = 0.5 52 server-id = 3306128 53 log-bin = /data/mysql/mysql-binlog 54 sync_binlog = 1 55 binlog_cache_size = 4M 56 max_binlog_cache_size = 1G 57 max_binlog_size = 1G 58 expire_logs_days = 7 59 master_info_repository = TABLE 60 relay_log_info_repository = TABLE 61 gtid_mode = on 62 enforce_gtid_consistency = 1 63 log_slave_updates 64 binlog_format = row 65 relay_log_recovery = 1 66 relay_log_purge = 1 67 key_buffer_size = 32M #用於MyISAM存儲引擎表,緩存MyISAM存儲 68 read_buffer_size = 8M #表順序掃描的緩存,只能應用於MyISAM表存儲引擎 69 read_rnd_buffer_size = 4M #mysql隨機讀緩存區大小,用於做mrr 70 bulk_insert_buffer_size = 64M 71 72 lock_wait_timeout = 3600 73 explicit_defaults_for_timestamp = 1 74 innodb_thread_concurrency = 0 75 innodb_sync_spin_loops = 100 76 innodb_spin_wait_delay = 30 77 transaction_isolation = REPEATABLE-READ 78 innodb_buffer_pool_size = 1024M #innodb_buffer_pool用來緩存Innodb表的數據、索引、插入緩存、數據字典等信息 79 innodb_buffer_pool_instances = 8 80 innodb_buffer_pool_load_at_startup = 1 81 innodb_buffer_pool_dump_at_shutdown = 1 82 innodb_data_file_path = ibdata1:1G:autoextend #系統表空間參數 83 innodb_flush_log_at_trx_commit = 1 84 innodb_log_buffer_size = 32M #innodb_log_buffer用於事務在內存中的緩存,即:redo log buffer的大小 85 innodb_log_file_size = 2G 86 innodb_log_files_in_group = 2 87 innodb_io_capacity = 2000 88 innodb_io_capacity_max = 4000 89 innodb_flush_neighbors = 0 90 innodb_write_io_threads = 8 91 innodb_read_io_threads = 8 92 innodb_purge_threads = 4 93 innodb_page_cleaners = 4 94 innodb_open_files = 65535 95 innodb_max_dirty_pages_pct = 50 96 innodb_flush_method = O_DIRECT 97 innodb_lru_scan_depth = 4000 98 innodb_checksum_algorithm = crc32 99 innodb_lock_wait_timeout = 10 100 innodb_rollback_on_timeout = 1 101 innodb_print_all_deadlocks = 1 102 innodb_file_per_table = 1 #獨立表空間 該參數設置為‘1’即可 103 innodb_online_alter_log_max_size = 4G 104 internal_tmp_disk_storage_engine = InnoDB 105 innodb_stats_on_metadata = 0 106 innodb_status_file = 1 107 innodb_status_output = 0 108 innodb_status_output_locks = 0 109 #performance_schema 110 performance_schema = 1 111 performance_schema_instrument = '%=on' 112 #innodb monitor 113 innodb_monitor_enable="module_innodb" 114 innodb_monitor_enable="module_server" 115 innodb_monitor_enable="module_dml" 116 innodb_monitor_enable="module_ddl" 117 innodb_monitor_enable="module_trx" 118 innodb_monitor_enable="module_os" 119 innodb_monitor_enable="module_purge" 120 innodb_monitor_enable="module_log" 121 innodb_monitor_enable="module_lock" 122 innodb_monitor_enable="module_buffer" 123 innodb_monitor_enable="module_index" 124 innodb_monitor_enable="module_ibuf_system" 125 innodb_monitor_enable="module_buffer_page" 126 innodb_monitor_enable="module_adaptive_hash" 127 [mysqldump] 128 quick 129 max_allowed_packet = 32M 130 131 #初始化數據庫 132 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --user=mysql --initialize #初始化數據庫時加上--initialize參數會生成一個臨時的數據庫初始化密碼,記錄在log-error(錯誤日志)中,如果加上--initialize-insecure參數,表示無密碼進入,建議使用生成初始密碼 133 134 #啟動數據庫 135 /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
136 #修改目錄屬主
137 chown -R mysql.mysql /usr/local/mysql
138 chown -R mysql.mysql /data/mysql
6.2、啟動完成后,修改初始密碼,設置永不過期
#使用初始密碼登錄到數據庫中 /usr/local/mysql/bin/mysql -uroot -pqpg47Wtts1#K #設置密碼 mysql>set password = 'password'; mysql>alter user 'root'@'localhost' password expire never; mysql>flush privileges;