1,下载解压
参考: https://blog.csdn.net/2202_76101487/article/details/145967039
下载: wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-server_8.4.4-1ubuntu24.04_amd64.deb-bundle.tar
建议个目录mysql8然后把安装包移过去,解压: tar -xvf mysql-server_8.4.4-1ubuntu24.04_amd64.deb-bundle.tar
2,卸载旧的mysql程序
查询安装的mysql: dpkg -l | grep mysql
停止mysql进程: service mysql stop 删除安装目录: /var/lib/mysql /etc/mysql /var/log/mysql
卸载Mysql: dpkg --purge mysql-community-client-core && dpkg --purge mysql-community-client-plugins
3,用dpkg -i命令批量安装
批量安装: dpkg -i mysql-common_8.4.4-1ubuntu24.04_amd64.deb mysql-client_8.4.4-1ubuntu24.04_amd64.deb mysql-community-client_8.4.4-1ubuntu24.04_amd64.deb mysql-community-client-core_8.4.4-1ubuntu24.04_amd64.deb mysql-community-client-plugins_8.4.4-1ubuntu24.04_amd64.deb mysql-community-server-core_8.4.4-1ubuntu24.04_amd64.deb mysql-community-server_8.4.4-1ubuntu24.04_amd64.deb
安装完成后,查看mysql状态: systemctl status mysql 或者: service mysql status
4,配置账户
连接到数据库,在ubuntu中执行命令,然后输入密码: mysql -uroot -p
添加root%用户: CREATE USER 'root'@'%' IDENTIFIED BY 'mytestaaa';
赋权限给root%用户: grant all privileges on *.* to 'root'@'%' with grant option;
刷新配置: flush privileges;
查看当前Mysql的端口号: show global variables like 'port';
5,优化性能,修改配置文件
# 下面是优化配置
# 参考: https://developer.huawei.com/home/forum/hwc/thread-02109153476715536012-1-1.html
port=3316
bind-address=0.0.0.0
log_bin=mysql-bin
binlog_format=ROW
# 下面是性能优化
max_connections=300
innodb_buffer_pool_instances=8
innodb_buffer_pool_size=1G
# 是否开启慢日志记录。1打开,0关闭。慢日志查询的默认路径: /var/lib/mysql/YC10-14U-slow.log。查询值: show variables like 'slow_query%';
slow_query_log=1
6,执行sql配置mysql参数
# 检查当前外链检查参数
SELECT @@foreign_key_checks;
# 设置外链检查参数
SET foreign_key_checks=0;
# 检查当前主键重复参数
SELECT @@unique_checks;
# 设置当前主键重复参数
SET unique_checks=0;
参考笔记:
# 是否检查外键。1打开,0关闭。 查询值: SELECT @@foreign_key_checks;只能执行sql来配置: SET foreign_key_checks=0;
# foreign_key_checks=0
# 禁用唯一性检查 。在golang里面,通过id设置来解决数据重复。 查询值: SELECT @@UNIQUE_CHECKS ; 只能执行sql来配置: SET unique_checks=0;
#unique_checks=0
## 配置好以后核查,
# 查询缓存命中率:show status like 'Innodb_buffer_pool_read%';
配置完成后,重启Mysql, 在ubuntu中执行命令: systemctl restart mysql
7,参考链接
https://blog.csdn.net/qq_39239864/article/details/144562977
https://gitcode.csdn.net/65eec91f1a836825ed79d747.html
https://www.bilibili.com/opus/771742178064990243
https://developer.huawei.com/home/forum/hwc/thread-02109153476715536012-1-1.html
8,常用命令
# 查看最大连接数,默认151
show variables like 'max_connections' ;
# 查看索引缓冲池最大内存(不带单位的话,就代表字节,可以用M,G为单位:例:1G,512M),默认为128M
show variables like 'innodb_buffer_pool_size';
# 显示缓冲池实例数,默认为1
show variables like 'innodb_buffer_pool_instances';
# 查看外键检查开关。1为打开,0为关闭,默认为1
SELECT @@foreign_key_checks;
# 查看主键是否重复的开关。1为打开,0为关闭,默认为1
SELECT @@unique_checks;
# 查看缓存相关的配置:
show variables like 'innodb_buffer_pool%';
# 查询缓存命中率:
show status like 'Innodb_buffer_pool_read%';
远程连接Mysql(其中,-P代表端口号,-h代表IP地址):
mysql -h 192.168.0.31 -P 3308 -u root -p
查看版本: SELECT VERSION();
# 查看日志
cd /var/log/mysql
tailf error.log
9,优化实战
排查缓存命中
查看show status like 'Innodb_buffer_pool_read%'; 的结果,
Innodb_buffer_pool_read_requests:逻辑读取请求的数量。
Innodb_buffer_pool_reads:InnoDB无法从缓冲池满足的逻辑读取数,必须直接从磁盘读取。
percent = innodb_buffer_pool_read_requests / (innodb_buffer_pool_reads + innodb_buffer_pool_read_requests) * 100%
上述的 percent>=99%,则表示当前的buffer pool满足当前的需求。否则需要考虑增加 innodb_buffer_pool_size的值。
缓存数据页占比:
show status like 'Innodb_buffer_pool_pages%';
innodb_buffer_pool_pages_data:InnoDB缓冲池中包含数据的页数。这个数字包括脏页和干净页。(使用压缩表时,报告的Innodb_buffer_pool_pages_数据值可能大于)
percent = Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total * 100%
上述的 percent>=95% 则表示当前的innodb_buffer_pool_size满足当前的需求。否则可以考虑增加 innodb_buffer_pool_size的值。
如何判断MySQL使用内存会不会过高
可能还有有一些担心,所有参数设置完毕后MySQL的占用会过高导致内存溢出,那么我们可以算一下他会不会太高。
通过下面的SQL语句:
SELECT ((@@key_buffer_size+@@innodb_buffer_pool_size+@@innodb_log_buffer_size)/1024/1024)+((@@read_rnd_buffer_size+@@read_buffer_size+@@myisam_sort_buffer_size+@@sort_buffer_size+@@join_buffer_size)/1024/1024*@@max_connections);
最终单位为MB
若该值不超过系统可用内存,说明还好(理论)