参考 https://dev.mysql.com/doc/refman/8.0/en/binary-installation.html https://dev.mysql.com/doc/refman/8.0/en/starting-server.html https://www.cnblogs.com/kaishirenshi/p/12667004.html


安装MySQL

  1. ###下载安装包
  2. wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz
  3. ### 对MySQL进行重命名
  4. [root@localhost local]# mv mysql-8.0.25-linux-glibc2.12-x86_64/ mysql
  5. [root@localhost local]# ll
  6. total 0
  7. drwxr-xr-x. 2 root root 6 Nov 3 2020 bin
  8. drwxr-xr-x. 2 root root 6 Nov 3 2020 etc
  9. drwxr-xr-x. 2 root root 6 Nov 3 2020 games
  10. drwxr-xr-x. 2 root root 6 Nov 3 2020 include
  11. drwxr-xr-x. 2 root root 6 Nov 3 2020 lib
  12. drwxr-xr-x. 3 root root 17 Jun 16 02:59 lib64
  13. drwxr-xr-x. 2 root root 6 Nov 3 2020 libexec
  14. drwxr-xr-x. 9 root root 129 Jun 16 03:16 mysql
  15. drwxr-xr-x. 2 root root 6 Nov 3 2020 sbin
  16. drwxr-xr-x. 5 root root 49 Jun 16 02:59 share
  17. drwxr-xr-x. 2 root root 6 Nov 3 2020 src
  18. [root@localhost local]#
  19. [root@localhost local]#
  20. [root@localhost local]#
  21. [root@localhost local]#
  22. [root@localhost local]#
  23. [root@localhost local]#
  24. ###创建用户组
  25. [root@localhost local]# groupadd mysql
  26. [root@localhost local]#
  27. [root@localhost local]#
  28. [root@localhost local]#
  29. ####添加MySQL用户
  30. [root@localhost local]# useradd -r -g mysql -s /bin/false mysql
  31. [root@localhost local]#
  32. [root@localhost local]#
  33. [root@localhost local]#
  34. [root@localhost local]# cd mysql/
  35. [root@localhost mysql]#
  36. [root@localhost mysql]#
  37. [root@localhost mysql]#
  38. [root@localhost mysql]# mkdir mysql-files
  39. [root@localhost mysql]#
  40. [root@localhost mysql]#
  41. [root@localhost mysql]#
  42. [root@localhost mysql]# ll
  43. total 284
  44. drwxr-xr-x. 2 7161 31415 4096 Apr 23 14:56 bin
  45. drwxr-xr-x. 2 7161 31415 55 Apr 23 14:56 docs
  46. drwxr-xr-x. 3 7161 31415 282 Apr 23 14:56 include
  47. drwxr-xr-x. 6 7161 31415 201 Apr 23 14:56 lib
  48. -rw-r--r--. 1 7161 31415 274942 Apr 23 11:06 LICENSE
  49. drwxr-xr-x. 4 7161 31415 30 Apr 23 14:56 man
  50. drwxr-xr-x. 2 root root 6 Jun 16 03:17 mysql-files
  51. -rw-r--r--. 1 7161 31415 666 Apr 23 11:06 README
  52. drwxr-xr-x. 28 7161 31415 4096 Apr 23 14:56 share
  53. drwxr-xr-x. 2 7161 31415 77 Apr 23 14:56 support-files
  54. [root@localhost mysql]#
  55. [root@localhost mysql]#
  56. ####赋予MySQL用户MySQL用户组 对mysql-files的权限
  57. [root@localhost mysql]# chown mysql:mysql mysql-files
  58. [root@localhost mysql]#
  59. [root@localhost mysql]#
  60. [root@localhost mysql]#
  61. [root@localhost mysql]# ll
  62. total 284
  63. drwxr-xr-x. 2 7161 31415 4096 Apr 23 14:56 bin
  64. drwxr-xr-x. 2 7161 31415 55 Apr 23 14:56 docs
  65. drwxr-xr-x. 3 7161 31415 282 Apr 23 14:56 include
  66. drwxr-xr-x. 6 7161 31415 201 Apr 23 14:56 lib
  67. -rw-r--r--. 1 7161 31415 274942 Apr 23 11:06 LICENSE
  68. drwxr-xr-x. 4 7161 31415 30 Apr 23 14:56 man
  69. drwxr-xr-x. 2 mysql mysql 6 Jun 16 03:17 mysql-files
  70. -rw-r--r--. 1 7161 31415 666 Apr 23 11:06 README
  71. drwxr-xr-x. 28 7161 31415 4096 Apr 23 14:56 share
  72. drwxr-xr-x. 2 7161 31415 77 Apr 23 14:56 support-files
  73. [root@localhost mysql]#
  74. [root@localhost mysql]#
  75. ###赋予MySQL用户的执行权限
  76. [root@localhost mysql]# chmod 750 mysql-files
  77. [root@localhost mysql]#
  78. [root@localhost mysql]#
  79. [root@localhost mysql]# ll
  80. total 284
  81. drwxr-xr-x. 2 7161 31415 4096 Apr 23 14:56 bin
  82. drwxr-xr-x. 2 7161 31415 55 Apr 23 14:56 docs
  83. drwxr-xr-x. 3 7161 31415 282 Apr 23 14:56 include
  84. drwxr-xr-x. 6 7161 31415 201 Apr 23 14:56 lib
  85. -rw-r--r--. 1 7161 31415 274942 Apr 23 11:06 LICENSE
  86. drwxr-xr-x. 4 7161 31415 30 Apr 23 14:56 man
  87. drwxr-x---. 2 mysql mysql 6 Jun 16 03:17 mysql-files
  88. -rw-r--r--. 1 7161 31415 666 Apr 23 11:06 README
  89. drwxr-xr-x. 28 7161 31415 4096 Apr 23 14:56 share
  90. drwxr-xr-x. 2 7161 31415 77 Apr 23 14:56 support-files
  91. [root@localhost mysql]#
  92. [root@localhost mysql]#
  93. ###执行MySQL的初始化 将会生成一个data文件夹 ,最后一行生成一个temporary密码
  94. [root@localhost mysql]# bin/mysqld --initialize --user=mysql
  95. 2021-06-16T07:18:33.509368Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.25) initializing of server in progress as process 1682
  96. 2021-06-16T07:18:33.521073Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
  97. 2021-06-16T07:18:34.461153Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
  98. 2021-06-16T07:18:35.564759Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 2M78VcFDrf+G
  99. [root@localhost mysql]#
  100. [root@localhost mysql]#
  101. [root@localhost mysql]# cd bin
  102. [root@localhost bin]#
  103. [root@localhost bin]#
  104. [root@localhost bin]# ps -ef | grep mysql
  105. root 1734 1523 0 03:19 pts/0 00:00:00 grep --color=auto mysql
  106. [root@localhost mysql]# ll
  107. total 288
  108. drwxr-xr-x. 2 7161 31415 4096 Apr 24 02:56 bin
  109. drwxr-x---. 6 mysql mysql 4096 Jun 16 15:18 data
  110. drwxr-xr-x. 2 7161 31415 55 Apr 24 02:56 docs
  111. drwxr-xr-x. 3 7161 31415 282 Apr 24 02:56 include
  112. drwxr-xr-x. 6 7161 31415 201 Apr 24 02:56 lib
  113. -rw-r--r--. 1 7161 31415 274942 Apr 23 23:06 LICENSE
  114. drwxr-xr-x. 4 7161 31415 30 Apr 24 02:56 man
  115. drwxr-x---. 2 mysql mysql 6 Jun 16 15:17 mysql-files
  116. -rw-r--r--. 1 7161 31415 666 Apr 23 23:06 README
  117. drwxr-xr-x. 28 7161 31415 4096 Apr 24 02:56 share
  118. drwxr-xr-x. 2 7161 31415 77 Apr 24 02:56 support-files
  119. [root@localhost mysql]#
  120. [root@localhost mysql]#
  121. [root@localhost mysql]# cd data
  122. [root@localhost data]# ll
  123. total 176568
  124. -rw-r-----. 1 mysql mysql 56 Jun 16 15:18 auto.cnf
  125. -rw-------. 1 mysql mysql 1676 Jun 16 15:18 ca-key.pem
  126. -rw-r--r--. 1 mysql mysql 1112 Jun 16 15:18 ca.pem
  127. -rw-r--r--. 1 mysql mysql 1112 Jun 16 15:18 client-cert.pem
  128. -rw-------. 1 mysql mysql 1676 Jun 16 15:18 client-key.pem
  129. -rw-r-----. 1 mysql mysql 196608 Jun 16 15:18 '#ib_16384_0.dblwr'
  130. -rw-r-----. 1 mysql mysql 8585216 Jun 16 15:18 '#ib_16384_1.dblwr'
  131. -rw-r-----. 1 mysql mysql 5931 Jun 16 15:18 ib_buffer_pool
  132. -rw-r-----. 1 mysql mysql 12582912 Jun 16 15:18 ibdata1
  133. -rw-r-----. 1 mysql mysql 50331648 Jun 16 15:18 ib_logfile0
  134. -rw-r-----. 1 mysql mysql 50331648 Jun 16 15:18 ib_logfile1
  135. drwxr-x---. 2 mysql mysql 6 Jun 16 15:18 '#innodb_temp'
  136. drwxr-x---. 2 mysql mysql 143 Jun 16 15:18 mysql
  137. -rw-r-----. 1 mysql mysql 25165824 Jun 16 15:18 mysql.ibd
  138. drwxr-x---. 2 mysql mysql 8192 Jun 16 15:18 performance_schema
  139. -rw-------. 1 mysql mysql 1680 Jun 16 15:18 private_key.pem
  140. -rw-r--r--. 1 mysql mysql 452 Jun 16 15:18 public_key.pem
  141. -rw-r--r--. 1 mysql mysql 1112 Jun 16 15:18 server-cert.pem
  142. -rw-------. 1 mysql mysql 1676 Jun 16 15:18 server-key.pem
  143. drwxr-x---. 2 mysql mysql 28 Jun 16 15:18 sys
  144. -rw-r-----. 1 mysql mysql 16777216 Jun 16 15:18 undo_001
  145. -rw-r-----. 1 mysql mysql 16777216 Jun 16 15:18 undo_002
  146. [root@localhost data]# cd ..
  147. [root@localhost mysql]#
  148. [root@localhost mysql]#
  149. [root@localhost mysql]#
  150. ####无法采用这种方式启动
  151. [root@localhost mysql]# systemctl start mysqld
  152. Failed to start mysqld.service: Unit mysqld.service not found.
  153. [root@localhost mysql]#
  154. [root@localhost mysql]#
  155. ###启动MySQL
  156. [root@localhost mysql]# bin/mysqld_safe --user=mysql &
  157. [1] 1816
  158. [root@localhost mysql]# Logging to '/usr/local/mysql/data/localhost.localdomain.err'.
  159. 2021-06-16T07:22:46.224871Z mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
  160. [root@localhost mysql]#
  161. [root@localhost mysql]#
  162. ###查看MySQL是否启动
  163. [root@localhost mysql]# ps -ef | grep mysql
  164. root 1816 1523 0 15:22 pts/0 00:00:00 /bin/sh bin/mysqld_safe --user=mysql
  165. mysql 1898 1816 9 15:22 pts/0 00:00:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=localhost.localdomain.err --pid-file=localhost.localdomain.pid
  166. root 1951 1523 0 15:22 pts/0 00:00:00 grep --color=auto mysql
  167. [root@localhost mysql]#
  168. [root@localhost mysql]#
  169. [root@localhost mysql]#
  170. [root@localhost mysql]#
  171. [root@localhost mysql]# cd bin
  172. ###进入MySQL发现错误
  173. [root@localhost bin]# ./mysql -uroot -p
  174. ./mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
  175. [root@localhost bin]#
  176. [root@localhost bin]#
  177. ####创建符号链接
  178. [root@localhost bin]# sudo ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5
  179. [root@localhost bin]#
  180. [root@localhost bin]#
  181. [root@localhost bin]# ./mysql -uroot -p
  182. Enter password:
  183. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  184. ###将产生的临时密码已下面方式进行登录
  185. [root@localhost bin]# ./mysql -uroot -p2M78VcFDrf+G
  186. mysql: [Warning] Using a password on the command line interface can be insecure.
  187. Welcome to the MySQL monitor. Commands end with ; or \g.
  188. Your MySQL connection id is 9
  189. Server version: 8.0.25
  190. Copyright (c) 2000, 2021, Oracle and/or its affiliates.
  191. Oracle is a registered trademark of Oracle Corporation and/or its
  192. affiliates. Other names may be trademarks of their respective
  193. owners.
  194. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  195. mysql> show databases;
  196. ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
  197. mysql>
  198. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
  199. Query OK, 0 rows affected (0.00 sec)
  200. mysql> show databases;
  201. +--------------------+
  202. | Database |
  203. +--------------------+
  204. | information_schema |
  205. | mysql |
  206. | performance_schema |
  207. | sys |
  208. +--------------------+
  209. 4 rows in set (0.00 sec)
  210. mysql> use mysql
  211. Reading table information for completion of table and column names
  212. You can turn off this feature to get a quicker startup with -A
  213. Database changed
  214. mysql>
  215. mysql>
  216. mysql> select user,password,host from user;
  217. ERROR 1054 (42S22): Unknown column 'password' in 'field list'
  218. mysql> select user,host from user;
  219. +------------------+-----------+
  220. | user | host |
  221. +------------------+-----------+
  222. | mysql.infoschema | localhost |
  223. | mysql.session | localhost |
  224. | mysql.sys | localhost |
  225. | root | localhost |
  226. +------------------+-----------+
  227. 4 rows in set (0.00 sec)
  228. mysql> update user set host = '%' where user = 'root';
  229. Query OK, 1 row affected (0.00 sec)
  230. Rows matched: 1 Changed: 1 Warnings: 0
  231. mysql> select user,host from user;
  232. +------------------+-----------+
  233. | user | host |
  234. +------------------+-----------+
  235. | root | % |
  236. | mysql.infoschema | localhost |
  237. | mysql.session | localhost |
  238. | mysql.sys | localhost |
  239. +------------------+-----------+
  240. 4 rows in set (0.00 sec)
  241. mysql>
  242. mysql>
  243. mysql> select version();
  244. +-----------+
  245. | version() |
  246. +-----------+
  247. | 8.0.25 |
  248. +-----------+
  249. 1 row in set (0.00 sec)
  250. ###刷新权限 就可以远程登陆了
  251. mysql> flush privileges;
  252. Query OK, 0 rows affected (0.00 sec)
  253. 因为MySQL8.0加密方式改变,所以远程连接需要修改加密方式或者更新驱动
  254. 修改mysql加密方式:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的root账号密码';
  255. 刷新权限:FLUSH PRIVILEGES
  256. mysql>
  257. mysql>

配置防火墙

  1. //查看防火墙的状态
  2. [root@localhost ~]# firewall-cmd --state
  3. running
  4. //关闭防火墙
  5. [root@localhost ~]# systemctl stop firewalld.service
  6. [root@localhost ~]# firewall-cmd --state
  7. not running
  8. //查看3306端口是否开启
  9. firewall-cmd --query-port=3306/tcp
  10. ###开启防火墙设置端口
  11. systemctl start firewalld.service
  12. #### zone --作用域
  13. #### add-port=80/tcp--添加端口,格式为:端口/通讯协议
  14. #### permanent--永久生效,没有此参数重启后失效
  15. firewall-cmd --zone=public --add-port=3306/tcp --permanent
  16. ####开启3306端口后,workbench或naivcat 就能连接到MySQL数据库了
  17. ####重启防火墙
  18. firewall-cmd --reload
  19. 添加端口号:
  20. 添加:iptables -I INPUT -p tcp --dport 3306 -j ACCET
  21. 查看:firewall-cmd --zone=public --list-ports

设置开机自启动

  1. //配置环境变量和系统自启动
  2. 配置mysql环境变量:将mysqlbin目录加入PATH环境变量,编辑 /etc/profile文件:
  3. vim /etc/profile
  4. #最后添加下面一行
  5. ###PATH与=不能有空格
  6. export PATH=$PATH:/usr/local/mysql/bin
  7. #执行命令使其生效:
  8. source /etc/profile
  9. ###用 export 命令查看PATH值:
  10. echo $PATH
  11. ####设置开机自启动:
  12. ####复制启动脚本到资源目录:
  13. [root@localhost mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
  14. ####增加 mysqld 服务控制脚本执行权限:
  15. [root@localhost mysql]# chmod +x /etc/rc.d/init.d/mysqld
  16. ####将 mysqld 服务加入到系统服务:
  17. [root@localhost mysql]# chkconfig --add mysqld
  18. ####检查mysqld服务是否已经生效:
  19. [root@localhost mysql]# chkconfig --list mysqld
  20. ####命令输出类似下面的结果:
  21. mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  22. 表明mysqld服务已经生效,在2345运行级别随系统启动而自动启动,以后可以使用 service 命令控制 mysql 的启动和停止。
  23. ####启动指令
  24. service mysqld stop

查看MySQL配置文件

  1. #### MySQL配置文件加载顺序
  2. [root@localhost ~]# mysql --help|grep 'my.cnf'
  3. order of preference, my.cnf, $MYSQL_TCP_PORT,
  4. /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
  5. ####查看是否使用了MySQL配置文件 好像没用
  6. [root@localhost ~]# ps aux|grep mysql|grep 'my.cnf'
  7. [root@localhost ~]#

配置My.cnf

https://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html 由于MySQL8 已不在安装包中包含配置文件,建议初始化MySQL之前去建立my.cnf Note: service mysqld stop

  1. [client]
  2. port = 3306
  3. #根据实际情况调整mysql.sock配置
  4. socket = /tmp/mysql.sock
  5. [mysqld]
  6. #Mysql服务的唯一编号 每个mysql服务Id需唯一
  7. server-id = 1
  8. #服务端口号 默认3306
  9. port = 3306
  10. #mysql安装根目录
  11. basedir = /usr/local/mysql
  12. #mysql数据文件所在位置
  13. datadir = /usr/local/mysql/data
  14. #pid
  15. pid-file = /usr/local/mysql/data/mysql.pid
  16. #设置socke文件所在目录
  17. socket = /tmp/mysql.sock
  18. #设置临时目录
  19. tmpdir = /tmp
  20. # 用户
  21. user = mysql
  22. # 允许访问的IP网段
  23. bind-address = 0.0.0.0
  24. # 跳过密码登录
  25. #skip-grant-tables
  26. #主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
  27. skip-external-locking
  28. #只能用IP地址检查客户端的登录,不用主机名
  29. skip_name_resolve = 1
  30. #事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
  31. transaction_isolation = REPEATABLE-READ
  32. #数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
  33. character-set-server = utf8mb4
  34. #数据库字符集对应一些排序等规则,注意要和character-set-server对应
  35. collation-server = utf8mb4_general_ci
  36. #设置client连接mysql时的字符集,防止乱码
  37. init_connect='SET NAMES utf8mb4'
  38. #是否对sql语句大小写敏感,1表示不敏感
  39. lower_case_table_names = 1
  40. #最大连接数
  41. max_connections = 400
  42. #最大错误连接数
  43. max_connect_errors = 1000
  44. #TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
  45. explicit_defaults_for_timestamp = true
  46. #SQL数据包发送的大小,如果有BLOB对象建议修改成1G
  47. max_allowed_packet = 128M
  48. #MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
  49. #MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
  50. interactive_timeout = 1800
  51. wait_timeout = 1800
  52. #内部内存临时表的最大值 ,设置成128M。
  53. #比如大数据量的group by ,order by时可能用到临时表,
  54. #超过了这个值将写入磁盘,系统IO压力增大
  55. tmp_table_size = 134217728
  56. max_heap_table_size = 134217728
  57. #数据库错误日志文件
  58. log_error = error.log
  59. #慢查询sql日志设置
  60. slow_query_log = 1
  61. slow_query_log_file = slow.log
  62. #检查未使用到索引的sql
  63. log_queries_not_using_indexes = 1
  64. #针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
  65. log_throttle_queries_not_using_indexes = 5
  66. #作为从库时生效,从库复制中如何有慢sql也将被记录
  67. log_slow_slave_statements = 1
  68. #慢查询执行的秒数,必须达到此值可被记录
  69. long_query_time = 8
  70. #检索的行数必须达到此值才可被记为慢查询
  71. min_examined_row_limit = 100
  72. #mysql binlog日志文件保存的过期时间,过期后自动删除
  73. expire_logs_days = 5

1,删除data目录

  1. cd /usr/local/mysql
  2. rm -rf data

2,在/etc/ 创建my.cnf

3,初始化MySQL

  1. bin/mysqld --initialize --user=mysql

临时密码会在 usr/local/mysql/data/error.log 中

4,启动MySQL

  1. bin/mysqld_safe --user=mysql &

5,进入MySQL

  1. ./mysql -uroot -p
  2. 输入密码
  3. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
  4. mysql> FLUSH PRIVILEGES;
  5. update user set host = '%' where user = 'root';
  6. mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的root账号密码';
  7. mysql> FLUSH PRIVILEGES;

6,验证配置文件

比如 大小写的问题