时间:2021-12-7 作者:冰城心无泪 分类: Linux应用
关闭selinux,要不然修改mysql默认端口后mysql服务起不来。
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
安装mysql后,我准备将mysql默认端口3306更改为3336,添加mysql新端口到防火墙,使其可以远程登录
firewall-cmd --set-default-zone=public
firewall-cmd --zone=public --add-port=3336/tcp --permanent
firewall-cmd --reload
https://downloads.mysql.com/archives/community/
Product Version(产品版本,即MySQL版本)
根据需要选择,有新的就选新的
Operating System(操作系统)
即需要安装在什么操作性系统上,因为Centos基于Red Hat,所以这里选Red Hat Enterprise Linux/Oracle Linux
OS Version(操作系统版本)
Centos7: Red Hat Enterprise Linux 7/Oracle Linux7(X86,64-bit)
Centos8: Red Hat Enterprise Linux 8/Oracle Linux8(X86,64-bit)
安装包类型选择
RPM Bundle(x.xx代表小版本号,下载的是一个tar包,下载下来后,传输到Centos服务器解压,解压后得到rpm安装包)
Centos7 tar包名字为:mysql-8.x.xx-1.el7.x86_64.rpm-bundle.tar
Centos8 tar包名字为:mysql-8.x.xx-1.el8.x86_64.rpm-bundle.tar
rpm -qa|grep mariadb|xargs rpm -e --nodeps
mkdir /home/mysql
tar -xvf /home/mysql-8.0.23-1.el7.x86_64.rpm-bundle.tar -C /home/mysql
yum -y install /home/mysql/mysql-community-common-8.0.23-1.el7.x86_64.rpm
yum -y install /home/mysql/mysql-community-client-plugins-8.0.23-1.el7.x86_64.rpm
yum -y install /home/mysql/mysql-community-libs-8.0.23-1.el7.x86_64.rpm
yum -y install /home/mysql/mysql-community-libs-compat-8.0.23-1.el7.x86_64.rpm
yum -y install /home/mysql/mysql-community-client-8.0.23-1.el7.x86_64.rpm
yum -y install /home/mysql/mysql-community-server-8.0.23-1.el7.x86_64.rpm
/etc/my.cnf
cp /etc/my.cnf /etc/my.cnf.bak
systemctl start mysqld
systemctl enable mysqld
先将默认密码读出来,作为一个变量
pwd=`grep "temporary password" /var/log/mysqld.log|awk -F' ' "{print $NF}"|awk '{print $NF}'`
然后直接修改密码为Abcd@1234
/usr/bin/mysqladmin -uroot -p${pwd} password "Abcd@1234"
查看初始密码:
grep "temporary password" /var/log/mysqld.log|awk -F' ' "{print $NF}"|awk '{print $NF}'
用初始密码登录mysql
mysql -uroot -P3336 -p"初始密码"
修改密码,退出即可
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Abcd@1234';
exit
Mysql默认连接端口是3306,修改配置文件,将连接端口修改为3336,注意,这里是两个大于号,追加内容(vi编辑配置文件添加配置也行)。然后重启mysql服务
echo "port=3336" >> /etc/my.cnf
systemctl restart mysqld
其他优化
修改binlog日志保留时间,以防binlog日志文件过多导致占用空间较大。
echo "binlog_expire_logs_seconds = 604800" >> /etc/my.cnf
如果是在生产环境中,Mysql服务不会轻易重启,这就需要在不重启服务的情况下清理binlog文件,当然,配置文件中也需要如上面参数修改,防止服务重启后恢复默认值,登录mysql,命令如下(设置为7天)
set global binlog_expire_logs_seconds=604800;
查看当前数据库日志binlog保存时效 以秒为单位,登录mysql,输入一下命令
show variables like '%binlog_expire_logs_seconds%';
为每一个innodb表建立单独的表空间,而不是都塞在系统表空间下
echo "innodb_file_per_table = 1" >> /etc/my.cnf
内存临时表大小,如果超出这个大小,则会生成磁盘临时表
echo "tmp_table_size=256m" >> /etc/my.cnf
echo "max_heap_table_size=256m" >> /etc/my.cnf
设置缓存池大小,通过缓冲池,加快业务处理。根据系统内存大小设置,最多能有80%的物理内存被用作缓冲池
echo "innodb_buffer_pool_size = 4G" >> /etc/my.cnf
JOIN BUFFER 是 MySQL 用来缓存以上第二、第三这两类 JOIN 检索的一个 BUFFER 内存区域块,适当增加join buffer的值来优化join查询
echo "join_buffer_size = 128M" >> /etc/my.cnf
查询排序时所能使用的缓冲区大小,增大sort_buffer_size值,以解决默认值太小,ORDER BY查询引发内存溢出的问题
echo "sort_buffer_size = 4M" >> /etc/my.cnf
read_buffer_size 读查询操作所能使用的缓冲区大小
echo "read_buffer_size = 4M" >> /etc/my.cnf
myisam_sort_buffer_size 这个缓冲区主要用于修复表过程中排序索引使用的内存或者是建立索引时排序索引用到的内存大小,一般4G内存给64M
echo "myisam_sort_buffer_size = 64M" >> /etc/my.cnf
它针对某些排序之后优化读取行,用在sort查询之后 ,以保证获取以顺序的方式获取到查询的数据
echo "read_rnd_buffer_size = 4M" >> /etc/my.cnf
MySQL管理员用户root,默认只能本地登录,修改使其能够远程登录(%代表所有主机.生成环境不建议这么做,最好新建个有远程权限的账号),修改完退出即可.
mysql -uroot -pAbcd@1234
use mysql;
update user set host = '%' where user ='root';
FLUSH PRIVILEGES;
exit
创建数据库my_test.Mysql8数据库的默认字符集是utf8mb4,排序规则是utf8mb4_0900_ai_ci,为了向前兼容,可以将排序规则改为utf8mb4_general_ci,若是新项目,不建议更改。
mysql -uroot -pAbcd@1234
create database my_test default character set utf8mb4 collate utf8mb4_general_ci;
exit
创建远程用户test,并设置密码为Abcd@5678,允许远程登录,并为新账号赋予权限 .(数据库名.表名)代表所有数据库的所有表,ALL代表所有权限,也可根据具体需要更改,如SELECT,INSERT,UPDATE等.创建完退出即可用新账号登录了.
mysql -uroot -pAbcd@1234
use mysql;
CREATE USER 'test'@'%' IDENTIFIED BY "Abcd@5678";
grant all privileges on *.* TO 'test'@'%';
FLUSH PRIVILEGES;
exit
Mysql8.0采用了新的caching_sha2_password的身份验证方式,旧的身份验证为mysql_native_password.更改身份验证,以兼容以前版本的加密连接,比如老版本的phpmyadmin连接报错,新版本的Navicat已支持新的身份验证。
6.1. 修改配置文件.修改配置文件后创建的所有用户,默认使用配置文件的身份验证方式。修改配置文件以前创建的用户不生效。如果是全新安装的mysql8,安装完成后,在从未启动服务(未初始化过)的情况下修改配置文件,那么,默认用户root及后续创建的用户,身份验证方式会自动初始化为配置文件的身份验证方式,若mysql安装完成后,已启动服务(已完成初始化),用方式二来更改用户的身份验证。
echo "default-authentication-plugin=mysql_native_password" >> /etc/my.cnf
systemctl restart mysqld
6.2. 登录mysql,命令行更改。注意是root主机是%还是localhost,千万比用update,别问为什么
mysql -uroot -pAbcd@1234
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Abcd@1234';
FLUSH PRIVILEGES;
exit
mysql -uroot -pAbcd@1234
use mysql;
select host,user,authentication_string,plugin from user;
exit
mysql -uroot -pAbcd@1234
use mysql;
SHOW GRANTS FOR '用户名'@'主机名';
exit
mysql -uroot -pAbcd@1234
use mysql;
查看已锁定用户
select user,host,account_locked from mysql.user;
解锁已锁定用户
ALTER USER 'username'@'hostname' ACCOUNT UNLOCK;
use 数据库名;
show tables;
show create database 数据库名;
SHOW CREATE TABLE tablename;
mysql -uroot -pAbcd@1234
use mysql;
set character_set_client = utf8mb4;
set character_set_server = utf8mb4;
set character_set_connection = utf8mb4;
set character_set_database = utf8mb4;
set character_set_results = utf8mb4;
set collation_connection = utf8mb4_general_ci;
set collation_database = utf8mb4_general_ci;
set collation_server = utf8mb4_general_ci;
FLUSH PRIVILEGES;
exit
mysql -uroot -pAbcd@1234
alter database 数据库名 default character set utf8mb4 COLLATE utf8mb4_general_ci;
exit
mysql -uroot -pAbcd@1234
use 数据库名;
alter table 表名 change 列名 列名 varchar(255) character set utf8mb4 collate utf8mb4_0900_ai_ci;
exit
show variables like 'validate_password.%';
策略说明(生产环境不建议更改)
validate_password.length 是密码的最小长度,默认是8,改成6
set global validate_password.length=6;
validate_password.policy 验证密码的复杂程度,改成0
set global validate_password.policy=0;
validate_password.check_user_name 用户名检查,用户名和密码不能相同,关掉
set global validate_password.check_user_name=off;
mysql -uroot -pAbcd@1234
drop database 数据库名
exit
mysql -uroot -pAbcd@1234
drop user '用户名'@'主机名';
delete from user where user='用户名' and host='主机名';
在配置文件/etc/my.cnf中[mysqld]后面任意一行添加skip-grant-tables用来跳过密码验证的过程,并重启mysql服务
echo "skip-grant-tables" >> /etc/my.cnf
systemctl restart mysqld
免密登录
mysql -uroot
清空root密码并退出
use mysql;
update user set authentication_string='' where user='root';
exit
注释掉或删除配置文件中skip-grant-tables并重启mysql服务(重申一遍,备份是个好习惯)
sed -i 's/skip-grant-tables/# &/' /etc/my.cnf
systemctl restart mysqld
无密码登录
mysql -uroot
重置root密码为Abcd@1357
flush privileges
ALTER USER 'root'@'%' IDENTIFIED BY 'Abcd@1357';
exit
mysqldump -h localhost -P 数据库端口 -u Msyql用户名 -p 密码 要备份的数据库名 > 保存路径及备份的名称(/home/Mysql_bak/my_bak.sql)
#### 忽略一张表 可以使用多个--ignore-table=数据库名.表名来忽略多张表
mysqldump -h localhost -P 数据库端口 -u Msyql用户名 -p 密码 要备份的数据库名 --ignore-table=数据库名.表名 > 保存路径及备份的名称(/home/Mysql_bak/my_bak.sql)