1.下载mysql5.7并解压
可以自己去下载5.7.22版本
2.可以把解压的内容随便放到一个目录,我的是如下目录(放到C盘的话,可能在修改ini文件时涉及权限问题,之后我就改放D盘了):
D:MySQLMySQL Server 5.7.22
如下图:此时加压后的文件中没有data目录和ini文件:
3.在D:MySQLMySQL Server 5.7.22目录下新建my.ini文件,复制如下内容
my.ini的配置如下:
[mysql] default-character-set=utf8 #no-auto-rehash #auto-rehash [client] port=3307 default-character-set=utf8 [mysqld] server-id = 101 basedir=D:mysqlmysql5.7.22-3307 datadir=D:mysqlmysql5.7.22-3307data port=3307 character_set_server=utf8 sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" back_log=600 #MySQL能暂存的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用。如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。 default-storage-engine=INNODB max_connections=1000 #MySQL允许最大的进程连接数,如果经常出现Too Many Connections的错误提示,则需要增大此值 max_allowed_packet=64M sort_buffer_size=2M # Sort_Buffer_Size 是一个connection级参数,在每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存 #Sort_Buffer_Size 并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统内存资源。例如:500个连接将会消耗 500*sort_buffer_size(8M)=4G内存 #Sort_Buffer_Size 超过2KB的时候,就会使用mmap() 而不是 malloc() 来进行内存分配,导致效率降低 #属重点优化参数 join_buffer_size = 2M #用于表间关联缓存的大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。 thread_cache_size = 300 #服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。设置规则如下:1GB 内存配置为8,2GB配置为16,3GB配置为32,4GB或更高内存,可配置更大。 query_cache_size = 256M ## 对于使用MySQL的用户,对于这个变量大家一定不会陌生。前几年的MyISAM引擎优化中,这个参数也是一个重要的优化参数。但随着发展,这个参数也爆露出来一些问题。机器的内存越来越大,人们也都习惯性的把以前有用的参数分配的值越来越大。这个参数加大后也引发了一系列问题。我们首先分析一下 query_cache_size的工作原理:一个SELECT查询在DB中工作后,DB会把该语句缓存下来,当同样的一个SQL再次来到DB里调用时,DB在该表没发生变化的情况下把结果从缓存中返回给Client。这里有一个关建点,就是DB在利用Query_cache工作时,要求该语句涉及的表在这段时间内没有发生变更。那如果该表在发生变更时,Query_cache里的数据又怎么处理呢?首先要把Query_cache和该表相关的语句全部置为失效,然后在写入更新。那么如果Query_cache非常大,该表的查询结构又比较多,查询语句失效也慢,一个更新或是Insert就会很慢,这样看到的就是Update或是Insert怎么这么慢了。所以在数据库写入量或是更新量也比较大的系统,该参数不适合分配过大。而且在高并发,写入量大的系统,建议把该功能禁掉。 #重点优化参数(主库 增删改-MyISAM) query_cache_limit = 4M #指定单个查询能够使用的缓冲区大小,缺省为1M query_cache_min_res_unit = 8K #默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费 #查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100% #如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。 #查询缓存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100% #查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。 #查询缓存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100% thread_stack = 512K #设置MYSQL每个线程的堆栈大小,默认值足够大,可满足普通操作。可设置范围为128K至4GB,默认为192KB。 transaction_isolation=READ-COMMITTED # 设定默认的事务隔离级别.可用的级别如下: # READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE # 1.READ UNCOMMITTED-读未提交2.READ COMMITTE-读已提交3.REPEATABLE READ -可重复读4.SERIALIZABLE -串行 tmp_table_size = 8096M # tmp_table_size 的默认大小是 32M。如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,如果你做很多高级 GROUP BY 查询,增加 tmp_table_size 值。如果超过该值,则会将临时表写入磁盘。 log_timestamps=SYSTEM #日志时区设置 max_heap_table_size = 8096M long_query_time = 10 slow_query_log = on slow-query-log-file =D:\mysql\mysql5.7.22-3307\slow-log\slow-log.log log-bin=D:mysqlmysql5.7.22-3307log-binlog-bin binlog_cache_size = 128M max_binlog_cache_size = 1G max_binlog_size = 512M binlog_format=ROW binlog-do-db=wtgldb2 sync_binlog=1 expire_logs_days = 7 key_buffer_size = 3072M #批定用于索引的缓冲区大小,增加它可以得到更好的索引处理性能,对于内存在4GB左右的服务器来说,该参数可设置为256MB或384MB。 read_buffer_size = 2M # MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。 read_rnd_buffer_size = 16M # MySql的随机读(查询操作)缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。 bulk_insert_buffer_size = 64M #批量插入数据缓存大小,可以有效提高插入效率,默认为8M myisam_sort_buffer_size = 128M # MyISAM表发生变化时重新排序所需的缓冲 #myisam_max_sort_file_size = 10G # MySQL重建索引时所允许的最大临时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE). # 如果文件大小比此值更大,索引会通过键值缓冲创建(更慢) #myisam_max_extra_sort_file_size = 10G #myisam_repair_threads = 1 # 如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用超过一个线程去修复他们. # 这对于拥有多个CPU以及大量内存情况的用户,是一个很好的选择. #myisam_recover #自动检查和修复没有适当关闭的 MyISAM 表 #skip-name-resolve #lower_case_table_names = 1 #server-id 为以后用数据库集群 #server-i ##--------对Innodb的配置----------------------------- innodb_buffer_pool_size=16G # 这对Innodb表来说非常重要。Innodb相比MyISAM表对缓冲更为敏感。MyISAM可以在默认的 key_buffer_size 设置下运行的可以,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。由于Innodb把数据和索引都缓存起来,无需留给操作系统太多的内存,因此如果只需要用Innodb的话则可以设置它高达 70-80% 的可用内存。一些应用于 key_buffer 的规则有 — 如果你的数据量不大,并且不会暴增,那么无需把 innodb_buffer_pool_size 设置的太大了 innodb_log_buffer_size=32M #此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据.MySQL开发人员建议设置为1-8M之间 innodb_thread_concurrency = 24 #服务器有几个CPU就设置为几,建议用默认设置,一般为8. innodb_flush_log_at_trx_commit = 1 # 如果将此参数设置为1,将在每次提交事务后将日志写入磁盘。为提供性能,可以设置为0或2,但要承担在发生故障时丢失数据的风险。设置为0表示事务日志写入日志文件,而日志文件每秒刷新到磁盘一次。设置为2表示事务日志将在提交时写入日志,但日志文件每次刷新到磁盘一次。 innodb_log_file_size=256M #此参数确定数据日志文件的大小,以M为单位,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间 innodb_log_files_in_group = 3 #为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3M innodb_max_dirty_pages_pct = 90 # Buffer_Pool中Dirty_Page所占的数量,直接影响InnoDB的关闭时间。参数innodb_max_dirty_pages_pct 可以直接控制了Dirty_Page在Buffer_Pool中所占的比率,而且幸运的是innodb_max_dirty_pages_pct是可以动态改变的。所以,在关闭InnoDB之前先将innodb_max_dirty_pages_pct调小,强制数据块Flush一段时间,则能够大大缩短 MySQL关闭的时间。 innodb_lock_wait_timeout = 50 # InnoDB 有其内置的死锁检测机制,能导致未完成的事务回滚。但是,如果结合InnoDB使用MyISAM的lock tables 语句或第三方事务引擎,则InnoDB无法识别死锁。为消除这种可能性,可以将innodb_lock_wait_timeout设置为一个整数值,指示 MySQL在允许其他事务修改那些最终受事务回滚的数据之前要等待多长时间(秒数) innodb_file_per_table = 1 #独享表空间(1开启,0关闭) #wait_timeout #指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。 group_concat_max_len=4294967295 log_bin_trust_function_creators=1
4.下面配置环境变量:
电脑属性-》高级系统设置-》
点击环境变量
在系统变量部分新建一个变量名:MYSQL_HOME, 变量值:D:MySQLMySQL Server 5.7.22
5.MySQL安装过程:
管理员身份运行cmd
进入如下目录:D:MySQLMySQL Server 5.7.22in
运行命令:mysqld --initialize (此时会生成data目录)
采坑:
如果运行命令提示:由于找不到MSVCR120.dll,无法继续执行代码.重新安装程序可能...
这种情况需要安装 vcredist
下载vcredist :https://www.microsoft.com/zh-CN/download/details.aspx?id=40784
下载后,直接安装。
运行mysqld -install (安装):
运行net start mysql (启动mysql服务)
可以在任务管理器中看到MySQL服务:
6.设置root账户密码:
在my.ini文件(MySQL的配置文件)的[mysqld]下加一行skip-grant-tables
然后在任务管理器中重启MySQL服务
重启MqSQL服务后,运行mysql -uroot -p,可以成功登入mysql
然后更新root账户的密码为'root'
命令:update mysql.user set authentication_string=password("root") where user="root";
然后输入flush privileges;(刷新账户信息)
执行quit或ctrl+Z退出
然后将my.ini文件中刚才加的skip-grant-tables这一行删掉,保存后再重启MySQL服务
然后运行mysql -uroot -proot就可以用root用户名和root密码登陆了:
采坑:
如果提示:You must reset your password using ALTER USER statement before executing this statement.
运行这条语句进行修改密码:alter user user() identified by "root";
给root修改可以远程访问的权限:
1.GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456'
这里的123456为你给新增权限用户设置的密码,%代表所有主机,也可以具体到你的主机ip地址
2.flush privileges;
这一步一定要做,不然无法成功! 这句表示从mysql数据库的grant表中重新加载权限数据
因为MySQL把权限都放在了cache中,所以在做完更改后需要重新加载。