安装MySQL8
apt install mysql-server
systemctl status mysql
更改配置(可远程,大小写不敏感)
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1
lower_case_table_names = 1
vi /etc/mysql/conf.d/disable_strict_mode.cnf
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
初始化数据库
service mysql stop
rm -rf /var/lib/mysql
sudo mkdir /var/lib/mysql
sudo chown mysql:mysql /var/lib/mysql
sudo chmod 700 /var/lib/mysql
sudo chown mysql:mysql /var/log/mysql
sudo chmod 700 /var/log/mysql
sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize --lower_case_table_names=1 --user=mysql --console
重启服务
service mysql restart
修改MySQL的ROOT密码
grep 'temporary password' /var/log/mysql/error.log
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'P@ssw0rd';
sudo mysql_secure_installation
VALIDATE PASSWORD yes
Password policy: 1 MEDIUM
Remove ...yes
disallow... no
让ROOT能远程访问
mysql -u root -p
(mysql8只能用两句执行了)
CREATE USER 'root'@'%' IDENTIFIED BY 'P@ssw0rd';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
验证一下
use mysql;
select user,host from user;
SHOW VARIABLES LIKE 'lower_case_%';
SELECT @@GLOBAL.sql_mode;
set global binlog_expire_logs_seconds = 259200;
purge binary logs before '2023-02-28 23:59:59';
卸载MySQL8
service mysql stop
dpkg --list|grep mysql
apt-get remove mysql-common
apt-get autoremove --purge mysql-server-8.0
dpkg -l|grep ^rc|awk '{print$2}'|sudo xargs dpkg -P
apt-get autoremove --purge mysql-apt-config
参考链接
https://blog.csdn.net/weixin_32533957/article/details/113128701
https://stackoverflow.com/questions/51803216/lower-case-table-names-settings-in-mysql-8-0-12
MySQL性能分析
- 1)一般来讲,排除高并发的因素,还是要找到导致你CPU过高的哪几条在执行的SQL,show processlist语句,查找负荷最重的SQL语句,优化该SQL,比如适当建立某字段的索引;
- 2)打开慢查询日志,将那些执行时间过长且占用资源过多的SQL拿来进行explain分析,导致CPU过高,多数是GroupBy、OrderBy排序问题所导致,然后慢慢进行优化改进。比如优化insert语句、优化group by语句、优化order by语句、优化join语句等等;
- 3)考虑定时优化文件及索引;
- 4)定期分析表,使用optimize table;
- 5)优化数据库对象;
- 6)考虑是否是锁问题;
- 7)调整一些MySQL Server参数,比如key_buffer_size、table_cache、innodb_buffer_pool_size、innodb_log_file_size等等;
- 8)如果数据量过大,可以考虑使用MySQL集群或者搭建高可用环境。
- 9)可能由于内存latch(泄露)导致数据库CPU高
- 10)在多用户高并发的情况下,任何系统都会hold不住的,所以,使用缓存是必须的,使用memcached或者redis缓存都可以;
- 11)看看tmp_table_size大小是否偏小,如果允许,适当的增大一点;
- 12)如果max_heap_table_size配置的过小,增大一点;
- 13)mysql的sql语句睡眠连接超时时间设置问题(wait_timeout)
- 14)使用show processlist查看mysql连接数,看看是否超过了mysql设置的连接数(http://www.cnblogs.com/kevingrace/p/6226324.html)
show processlist;
show full processlist;
show open tables;
show status like '%lock%';
show engine innodb status;
show variables like '%timeout%';
optimize table mp_device
pidstat -u 查看一下CPU使用率
pidstat -t -p 24319 查看mysql 线程使用的cpu
SELECT * FROM performance_schema.threads WHERE THREAD_OS_ID = 24352 OR THREAD_OS_ID = 24353