目前有三种安装方法,以下介绍的是解压tar包的安装方式
1. 规划数据库磁盘路径,以下为例
路径 | 文件系统 | 大小 | |
Mysql安装路径 | /home/mysql | /dev/sda1 | 5G |
数据文件路径 | /home/mysql/data | /dev/sda2 | 10T |
2. 获取安装包
通过官网去下载mysql版本
https://dev.mysql.com/downloads/mysql/
也可以用wget命令去下载
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz
解压文件
tar -xvf mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz
3. 检查环境
执行rpm -qa | grep -i mysql 和rpm -qa | grep -i mariadb查出已安装mysql的包名
卸载原有版本mysql
rpm -e --nodeps 包名
执行find / -name mysql 查看mysql相关的目录并删除
4. 创建mysql用户组和用户.
创建用户组
groupadd mysql
创建用户
useradd -m -d /home/mysql mysql -g mysql
修改密码
passwd mysql
登录mysql用户并创建mysql数据文件目录:datadir
mkdir mysql_data
5. 初始化数据库
将解压文件移到/home/mysql/目录下
赋权限:
chown -R mysql:mysql /home/mysql
进入/home/mysql/mysql-8.0.25-linux-glibc2.12-x86_64/bin
执行下面命令:
./mysqld --initialize --user=mysql --basedir=/home/mysql/mysql-8.0.25-linux-glibc2.12-x86_64 --datadir=/home/mysql/mysql_data
Mysql8后
lower-case-table-names这个参数是写死的,只能在初始化时设置
完成后记下默认密码
例如:sS:Cfqj4klN;
6. 修改配置
将MySQL加入系统进程中,以root用户操作
进入support-files目录,将文件mysql.server复制到系统服务目录下
cp support-files/mysql.server /etc/init.d/mysql
修改文件中basedir和datadir参数
vi /etc/init.d/mysql
basedir=/home/mysql/mysql-8.0.25-linux-glibc2.12-x86_64
datadir=/home/mysql/mysql_data
7. 启动mysql
service mysql start
8. 添加到开机启动
chkconfig --add mysql
9. 配置环境变量
如果只有mysql用户在用,可配到mysql用户目录下的.bash_profile文件
如果需要所有用户用mysql,可配到/etc/profile目录下
export MYSQL_HOME=/home/mysql/mysql-8.0.26;
export PATH=$PATH:$MYSQL_HOME/bin;
10. 登录
用mysql用户登录,进入mysql的bin目录下执行./mysql -u root -p
使用前第5步中记录下的密码登录
11. 修改密码
用Navicat去连,可能连不上,因为mysql的加密方式8.0以后就变了,要改回以前方式
alter user root@localhost identified with mysql_native_password by 'root';
alter user root@localhost identified by 'root' PASSWORD EXPIRE NEVER;
flush privileges;
12. 打开远程登录权限
直接改表,%就表示在任何客户端机器上能以root用户登录到mysql服务器
mysql> use mysql;
mysql> update user set host = '%' where user = 'root';
授权
grant all privileges on *.* to 'root'@'%';
flush privileges;
可能出现问题
Starting MySQL.Logging to '/home/mysql/mysql_data/MySQL1.err'.
第一次可能是没建mysql1.err,重启一次就好
MySQL配置文件详解
port = 3306: 指定了Mysql开放的端口;
basedir = /usr/local/mysql: 指定Mysql安装的绝对路径;
datadir = /data/mysql_db_data: 指定Mysql数据存放的绝对路径;
socket = /tmp/mysql.sock: 套接字文件这里要注意,有时候重启mysql会提示/tmp/mysql.sock不存在,此时通常会由于两种情况导致,解决方法:路径不对,此时找一下该文件的路径,然后配置指向正确的路径即可;误删除了,此时需重启mysql服务,重启完后会在datadir目录下生成一个该文件,然后配置指向正确的路径就可以了;
plugin_dir = /usr/local/mysql/lib/plugin: mysql中plugin插件所在的路径;
log-error = /data/mysql_db/data/error.log: mysql生成的错误日志存放的路径,它是一个文本文件,遇到有什么问题想查看日志时可以到这个文件里去找线索;
symbolic-links = 0 符号连接,如果设置为1,则mysql数据库和表里的数据支持储存在datadir目录之外的路径下,默认都是0(较新版本的mysql下默认是1);
local-infile = 0 设置为0表示关闭服务器从本地load的功能,设置为1则打开;
max-connections = 320 设置Mysql的最大连接数;如果实际应用中,并发的连接数量比较大,可适当的调高此参数,但是,也不是说越高越好,因为这牵涉到服务器的机器硬件的性能。有时候查看日志,会看到例如:“Error 1040 : Too many connections”这样的错误,导致这种错误出现的原因通常是由于该参数的值设置过小导致;
query_cache_limit = 4M 指定单个查询可以使用的缓冲区的大小,一般默认值是1M;
query_cache_size = 64M 查询的缓存大小设置;
query_cache_type = 1 设置缓存的类型,有以下几种设置方法:设置成0,表示禁用缓存;设置成1,表示缓存所有结果;设置成2,表示只缓存在select语句中通过SQL_CACHE指定需要缓存的查询;
max_user_connections = 320: 用户连接数的最大值设置,有时候会出现:“has more than max_user_connections active connections”的错误,不一定是该参数的设置个数不够,有时候需要从代码里找原因,查看是否连接结束后及时断开;
wait_timeout = 9000: 超时等待时间,单位秒,即一个connection在若干秒内无响应,则服务器切断与这个客户端的连接;
connect_timeout = 20: 客户端与服务器建立连接时,服务器返回错误的握手协议前,等待数据包到来的最大时间,单位秒;
thread_cache_size = 256 用于缓存空闲的线程;
key_buffer_size = 16M: 用于指定索引缓冲区的大小;
join_buffer_size = 2M: 查询语句中如果较多次使用join查询时,可适当增大该参数,默认2M,如果几乎不怎么用join进行查询,可不予理max_heap_table_size = 16M:指定用户可创建内存表的大小;
low_priority_updates = 1: 设置服务器降低写操作的优先级,设置为1表示以读为主;
max_allowd_packet = 128M: 设置一次消息传输的最大值;
max_seeks_for_key = 100: 设置基于key查询允许的最大查找次数;
sort_buffer_size = 16M: 通过增加该值的大小可以提高查询中使用“group by”和“order by”的性能;
read_buffer_size = 16M: 设置服务器读缓冲区的大小;
max_connect_errors = 10: 客户端连接服务器在没有成功时就被阻断了,累计后超过这个设置的值时,服务器将阻止该客户端后续的所有访问;myisam_sort_buffer_size = 64M:服务器重建索引时允许建立的最大临时文件的大小;
tmp_table_size = 64M: 设置临时内部堆积表(Heap)的大小;
read_rnd_buffer_size = 1M: 设置服务器随机读取缓冲区的大小;
open_file_limit = 6050: 控制文件打开的个数;