mysql简介
mysql是一种开放源码的的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言(SQL)进行数据库管理。
MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。
MySQL因为其速度、可靠性和适应性而备受关注。
说明
编写本文之前,根据相关安装文档,自己动手安装,走了不少弯路。
本文演示mysql8.0.18的离线包,在linux(centos7 64位)下的安装步骤,给大家、给自己做个参考。
本文的安装步骤,是在自己做安装练习的情况下编写,如果在生产环境下安装,请注意以下几项:
- 配置文件中,数据库文件的保存目录
- 配置文件中,mysql服务的端口、线程、超时等配置
- mysql的登录账号、密码的复杂度、保密等
- 其他
下载
官网下载linux 64位的mysql8.0.18版本
https://dev.mysql.com/downloads/mysql/
安装mysql
上传目录、安装目录、数据文件目录,可以自定义,本文这里是“/usr/mysql/”目录,这也是软件安装目录。
创建mysql目录
“mkdir /usr/mysql”,创建mysql目录
上传mysql
上传mysql压缩包
解压mysql
注意:mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz文件的后缀是.tar.xz,不是.tar.gz,所以解压命令的参数有所不同。
“tar xvJf /usr/mysql/mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz -C /usr/mysql/”,解压msyql压缩包
重命名mysql
“mv /usr/mysql/mysql-8.0.18-linux-glibc2.12-x86_64 /usr/mysql/mysql”重命名文件夹
实际上可以不做,只是为了让文件夹名字短点。
创建data目录
“mkdir /usr/mysql/mysql/data”,创建mysql的数据目录,可以使用其他目录。如果是生产环境,该数据库目录请使用分区较大的目录,或者分布式文件系统的目录。
安装、运行mysql时候,一般不用root用户,因此创建mysql组和mysql用户
创建mysql组
“groupadd mysql”,创建mysql用户组
创建mysql用户
“useradd -r -g mysql mysql”,创建mysql用户,使用-r参数表示mysql用户是一个系统用户,不能登录
进入mysql目录
“cd /usr/mysql/mysql”,进入mysql目录
修改拥有者用户
“chown mysql:mysql -R ./”,修改mysql目录下的所有文件、文件夹的拥有者为mysql组的mysql用户
修改读写权限
“chmod -R 777 /usr/mysql/mysql”,修改mysql文件夹、文件的读写权限
mysql安装、运行,使用的是mysql用户,需要给mysql用户对mysql目录的拥有权限、读写权限。
安装mysql
“/usr/mysql/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/mysql/mysql/data --basedir=/usr/mysql/mysql”,初始化mysql
/usr/mysql/mysql/bin/mysqld:mysql的相关安装文件目录
--user:使用哪个用户安装mysql
--datadir:mysql数据库的数据存放目录,
--basedir:mysql数据库的根目录
注意最后一行,这也是和之前版本不同的地方,它给了root一个初始密码,后面要登录的时候要用到这个密码。
一定要记住最后一行的root的初始密码。
一定要记住最后一行的root的初始密码。
一定要记住最后一行的root的初始密码。
拷贝my.cnf
“cp /usr/mysql/mysql/support-files/my_default.cnf /etc/my.cnf”,拷贝mysql的配置文件到etc目录
注意:support-files目录下是没有my_default.cnf这个文件的,需要自己创建,文件中的内容如下
注意:basedir、datadir、port、socket这几个配置项
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html # *** DO NOT EDIT THIS FILE. It's a template which will be copied to the # *** default location during install, and will be replaced if you # *** upgrade to a newer version of MySQL.
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 一般配置选项 basedir = /usr/mysql/mysql datadir = /usr/mysql/mysql/data port = 3306 socket = /usr/mysql/mysql/mysqld.sock character-set-server=utf8
#下面是可选项,要不要都行,如果出现启动错误,则全部注释掉,保留最基本的配置选项,然后尝试添加某些配置项后启动,检测配置项是否有误 back_log = 300 max_connections = 3000 max_connect_errors = 50 table_open_cache = 4096 max_allowed_packet = 32M #binlog_cache_size = 4M
max_heap_table_size = 128M read_rnd_buffer_size = 16M sort_buffer_size = 16M join_buffer_size = 16M thread_cache_size = 16 # query_cache_size = 128M # query_cache_limit = 4M ft_min_word_len = 8
thread_stack = 512K transaction_isolation = REPEATABLE-READ tmp_table_size = 128M #log-bin=mysql-bin long_query_time = 6
server_id=1
innodb_buffer_pool_size = 1G innodb_thread_concurrency = 16 innodb_log_buffer_size = 16M
innodb_log_file_size = 512M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 innodb_file_per_table = on
[mysqldump] quick
max_allowed_packet = 32M
[mysql] no-auto-rehash default-character-set=utf8 safe-updates
[myisamchk] key_buffer = 16M sort_buffer_size = 16M read_buffer = 8M write_buffer = 8M
[mysqlhotcopy] interactive-timeout
[mysqld_safe] open-files-limit = 8192
[client] #/bin/bash: Q: command not found |
注:后边启动mysql服务时候,因为query_cache_size、query_cache_limit两个参数不能正常安装,因此注释掉这两个参数。各参数的意义自行查找。
编辑my.cnf
可以使用linux的vi编辑器(类似window的记事本),为了省事,这里直接使用Xftp,用记事本方式,打开/etc/my.cnf,修改mysql的目录
basedir:mysql的安装目录
datadir:mysql的数据库文件目录
port:端口号
socket:客户端和服务器端,建立连接的socket文件
character-set-server:mysql的数据库编码
拷贝mysqld
“cp /usr/mysql/mysql/support-files/mysql.server /etc/init.d/mysqld”,拷贝mysql的配置文件到etc目录
编辑mysqld
使用Xftp,用记事本方式,打开/etc/init.d/mysqld,编辑mysqld,修改mysql的目录basedir、datadir
启动mysql
“service mysqld start”,启动mysql服务。
这里启动出现了报错,将my.cnf中的query_cache_size、query_cache_limit两个配置项注释掉,即可正常启动。
通过“netstat -ntlp”查看端口、进程,可以看到端口为3306的mysql进程。
停止mysql
“service mysqld stop”,停止mysql服务
修改root密码,远程登录
- “ln -s /usr/mysql/mysql/mysqld.sock /tmp/mysql.sock”,建立快捷连接,“/usr/mysql/mysql/mysqld.sock”是my.cnf中配置的“socket”的值。客户端与mysql服务器建立连接的socket文件默认好像是/tmp/mysql.sock,因此建立快捷连接。
- “service mysqld stop”,停止mysql
- “/usr/mysql/mysql/bin/mysqld_safe --skip-grant-tables &”,安全模式重启mysql,之后输入“bg”,使mysql后台运行。
- “/usr/mysql/mysql/bin/mysql -p”,用安装mysql时的密码,登录mysql
- 修改密码
use mysql;
set SQL_SAFE_UPDATES=0;
select host, user from user;
update user set host = '%' where user='root';
select host, user from user;
flush privileges;
ALTER USER 'root'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'MyPwd@123';
flush privileges;
set SQL_SAFE_UPDATES=1;
exit;
- 修改密码以后,使用“service mysqld stop”关闭安全模式启动的mysql服务,再使用“service mysqld start”重新启动mysql服务,否则会影响远程连接数据库。如果不能关闭mysql服务,可以直接杀死进程,在重新启动mysql服务。
说明:
- 为了防止随意修改数据,数据库添加了SQL_SAFE_UPDATES参数,修改数据前将SQL_SAFE_UPDATES改为0,即执行sql:set SQL_SAFE_UPDATES=0;
- 修改密码时,总是报如下错误:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
修改密码前,先执行“flush privileges;”,先刷新权限表,即可解决
- 修改数据之后,需要将SQL_SAFE_UPDATES参数改回去,执行sql:set SQL_SAFE_UPDATES=1;
- 新版本之后,密码要求复杂性,大小写、数字、特殊字符需要包含。
centos防火墙
centos中,在防火墙中,添加3306端口,或者直接关闭防火墙,但是不建议直接关闭防火墙。
或者通过命令的方式,允许端口3306通过防火墙。
测试连接
使用navicat客户端,连接mysql服务。
开机启动mysql
- “chmod +x /etc/init.d/mysqld”,修改权限
- “chkconfig --add mysqld”,把mysql注册为开机启动的服务
- “shutdown -r now”,重启linux
文章中,难免有错误,请大家批评指正。