一 、使用yum 进行安装
1、添加MySQL官方的仓库。这可以通过下载MySQL官方提供的仓库配置包来完成。执行以下命令下载并安装仓库配置包:
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
2、安装MySQL服务器
sudo yum install mysql-community-server
3、启动MySQL服务
sudo systemctl start mysqld
4、查看MySQL服务的状态
sudo systemctl status mysqld
5、安全设置MySQL。运行mysql_secure_installation脚本来设置root用户密码,移除匿名用户,禁止root远程登录等:
sudo mysql_secure_installation
6、登录到MySQL数据库确认安装是否成功
mysql -u root -p
二、使用安装包进行安装
1、下载mysql安装包(都要)
https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.37-linux-glibc2.12-x86_64.tar.xz
mysql-8.0.37-linux-glibc2.12-x86_64.tar.xz
2、执行安装(都要)
## 解压缩文件并移动到指定目录
tar -xvJf mysql-8.0.37-linux-glibc2.12-x86_64.tar.xz 或 tar -zxvf mysql-8.0.37-linux-glibc2.12-x86_64.tar.xz
## 复制到 /usr/local目录 或是移到指定目录:mv mysql-5.7.10-linux-glibc2.5-x86_64 /home/mysql/mysql-5.7.10
cp -r mysql-8.0.37-linux-glibc2.12-x86_64 /usr/local/
cd /usr/local/
mv mysql-8.0.37-linux-glibc2.12-x86_64 mysql
##安装运行mysql所需的包 mysql 5 版本需要
yum search libaio
yum install libaio
## 安装及配置mysql,参照mysql文件中的INSTALL-BINARY;
groupadd mysql #添加一个mysql用户组
# useradd -r -g mysql -s /bin/false mysql #设置-s /bin/false表示mysql不能作为登入用户
useradd -g mysql -s /sbin/nologin mysql
## 未安装在local目录下,需要在/usr/local/目录下创建一个mysql链接
cd /usr/local
ln -s /home/mysql/mysql-5.7.10 mysql
chown -R mysql.mysql /usr/local/mysql
#作为存放数据的目录
cd mysql
mkdir data
chmod 770 data #修改data目录的进入权限
#mkdir /data
#cd /data
mkdir -p /data/{mysqldata,mysqllog,mysqltmp}
chown -R mysql.mysql /data/{mysqldata,mysqllog,mysqltmp}
chown -R mysql:mysql . #修改当前文件夹的用户权限和组权限
# MySQL 5.7.10初始化设置
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
#执行该命令后,注意最后一行的[Note]信息
# [Note] A temporary password is generated for root@localhost: )9AsdF(+86h49 生成的初始密码在首次以root用户登入时使用;
# MySQL 5.7.10安全连接设置
bin/mysql_ssl_rsa_setup --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
chown -R root .
chown -R mysql data
cd /var/log
mkdir mysql #作为存放数据库运行日志的文件夹
cd /usr/local/mysql/
#此命令在后台运行
bin/mysqld_safe --user=mysql --basedir=/usr/local/mysql--datadir=/usr/local/mysql/data &
#将mysql加入到可控制启动服务的文件夹内,并命名mysql,即service可控制的服务名,届时可用service mysql start|stop控制启动及关闭mysql
cp support-files/mysql.server /etc/init.d/mysql
3、在/data目录,创建my.cnf文件,写入以下内容:(都要,除server-id以外,其他都先不动,server-id需要每台机器不一样)
[mysqld]
datadir=/data/mysqldata/
secure-file-priv=/data/mysqltmp
tmpdir=/data/mysqltmp
log-error=/data/mysqllog/mysqld.log
pid-file=/usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
#read_only = 1
log_timestamps = SYSTEM
slow_query_log=1
long_query_time=5
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
explicit_defaults_for_timestamp
skip-name-resolve
skip-character-set-client-handshake
skip-host-cache
skip-external-locking
skip-slave-start
innodb_buffer_pool_size = 10240M
innodb_sort_buffer_size = 2048M
innodb_read_io_threads = 4
innodb_write_io_threads = 4
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 64M
innodb_log_file_size = 128M
innodb_log_files_in_group = 4
#innodb_lock_wait_timeout = 200
#innodb_flush_method=O_DIRECT
innodb_adaptive_flushing=ON
innodb_max_dirty_pages_pct=80
innodb_io_capacity=1000
lower_case_table_names=1
wait_timeout=28800
interactive_timeout=28800
character-set-server=utf8
collation-server=utf8_general_ci
log-bin-trust-function-creators=1
max_connections=1024
max_allowed_packet=512M
back_log=500
event_scheduler=on
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:10G
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=1
gtid_mode=ON
enforce_gtid_consistency=TRUE
log-bin=mysql-bin-A
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
#log-slave-updates
sync_binlog=1
auto_increment_offset=1
auto_increment_increment=1
expire_logs_days=4
binlog_format=row
slave_parallel_type=LOGICAL_CLOCK
slave_parallel_workers=4
master_info_repository = TABLE
relay_log_info_repository = TABLE
#federated
#slave-skip-errors=1061,1062,1305,1032
[mysqldump]
quick
max_allowed_packet = 1G
[mysql]
no-auto-rehash
socket = /usr/local/mysql/mysql.sock
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
mkdir -p /data/{mysqldata,mysqllog,mysqltmp}
chown -R mysql.mysql /data/{mysqldata,mysqllog,mysqltmp}
4、初始化mysql,启动mysql(都要)
初始化 如果报错可能是系统和mysql版本不兼容,我这里是centos7最小安装
# 初始化 如果报错可能是系统和mysql版本不兼容,我这里是centos7最小安装
/usr/local/mysql/bin/mysqld --defaults-file=/data/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldata
# 启动
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/my.cnf --pid-file=/usr/local/mysql/mysqld.pid --datadir=/data/mysqldata &
5、查看密码(都要)
执行如下命令查看日志,找到图中类似位置,为root密码
more /data/mysqllog/mysqld.log
6、登录mysql(都要)
执行如下命令,并输入密码即可
/usr/local/mysql/bin/mysql -uroot -p -S /usr/local/mysql/mysql.sock
7、修改管理员密码(都要)
alter user 'root'@'localhost' identified by '你的管理员密码';
三、Centos-8 安装 mysql 8
安装MySQL的话会和MariaDB的文件冲突,所以需要先卸载掉MariaDB。
- 安装准备
查看是否安装mariadb
查看是否安装mariadb
rpm -qa|grep mariadb
卸载
rpm -e --nodeps 上一步的文件名
检查是否卸载完成
rpm -qa|grep mariadb
查看是否安装libaio
查看是否安装libaio
rpm -qa|grep libaio
如果没有安装则执行
yum -y install libaio
有则不需要操作
查看是否安装
查看是否安装numactl
rpm -qa|grep numactl
如果没有安装则执行
yum -y install numactl
有则不需要操作
安装MySQL
这里我安装在/usr/local目录下
cd /usr/local/
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.30-linux-glibc2.17-x86_64-minimal.tar
这里需要注意的是:这个mysql版本的地址可能后面会失效,那如何获取其他地址进行下载呢? 输入地址:https://www.mysql.com/ 选择DOWNLOADS -> Community (GPL) Downloads -> MySQL Community Server -> Archives
下载完成后,拆分tar包
tar -xvf mysql-8.0.30-linux-glibc2.17-x86_64-minimal.tar
解压安装包
tar -xvf mysql-8.0.30-linux-glibc2.17-x86_64-minimal.tar.xz
将解压后的文件夹重命名为mysql
mv mysql-8.0.30-linux-glibc2.17-x86_64-minimal/ mysql
存储数据文件
cd mysql
在重命名后的mysql文件夹中创建data文件夹
mkdir data
设置用户组并赋权
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql /usr/local/mysql/
chmod -R 755 /usr/local/mysql/
初始化MySQL
cd /usr/local/mysql/bin/
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
注意:这里会打印一个初始密码,需要记录下来,后面用于登录::y27?RvdRy&(
启动MySQL
/usr/local/mysql/support-files/mysql.server start
设置软连接
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/mysql.sock /var/mysql.sock
service mysql restart
如果提示 ln: failed to create symbolic link '/etc/init.d/mysql': No such file or directory
sudo mkdir -p /etc/init.d
修改密码
mysql -uroot -p
这里输入上一步的初始化随机密码
alter user 'root'@'localhost' identified by '123456';
开启远程连接
use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;
exit;
开放端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
开启或关闭MySQL命令
service mysql stop
service mysql start
service mysql restart
修改sql_mode设置
#修改sql_mode设置,避免出现
## Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db.t_student.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
## 这个错误是由于MySQL的sql_mode设置为only_full_group_by导致的。在这种模式下,当使用GROUP BY子句时,SELECT列表中的列必须是聚合函数或在GROUP BY子句中列出的列。如果SELECT列表中的列不满足这个条件,就会出现这个错误。
vim /etc/my.cnf
## 加入以下内容
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
## 重启MySQL即可
service mysql restart
安装过程中遇到的问题
## cannot open shared object file: No such file or directory
## mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
## 安装缺失的包文件
yum install libncurses* -y
开启mysqldump
## 查看路径
which mysqldump
## 将mysqldump所在的路径添加到PATH环境变量中
export PATH=$PATH:/usr/local/mysql/bin
## 使修改的PATH环境变量生效
source ~/.bashrc
## 验证mysqldump是否已经添加到系统路径中
mysqldump --version
设置开机自启动
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list
