-
转载https://blog.csdn.net/Tah_001/article/details/107660943?utm_medium=distribute.pc_category.none-task-blog-hot-8.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-8.nonecase&request_id=一、环境介质准备Mysql安装包准备Mysql官方网站下载社区版二进制安装包:https://downloads.mysql.com/archives/community/PS:可以根据自己的情况,自行选择需要的版本。服务器准备我这里使用的是centos 7.x,此方法适用于任何其他linux版本。配置文件my.cnf准备一般情况下,用其他安装方式(YUM,自行编译等),会自动生成默认配置文件,但不建议那样做,因为根据服务器各方面的配置不同,Mysql的配置参数也要做相应的调整,才能最优。下面贴出我的配置文件:(仅供参考,因为测试好多参数是随意配置的)#**************MySQL5.7*************** [client] default-character-set=utf8 # The MySQL server [mysqld] port = 3306 user = mysql socket = /d/mysqldata/mysql3306/sock/mysql.sock basedir = /d/mysqlbase/mysql3306 datadir = /d/mysqldata/mysql3306/mydata tmpdir = /d/mysqldata/mysql3306/tmpdir pid-file= /d/mysqldata/mysql3306/sock/mysql.pid transaction-isolation=Read-Committed secure_file_priv= local-infile=1 skip-symbolic-links character_set_server=utf8mb4 collation_server=utf8mb4_general_ci lower_case_table_names=1 explicit_defaults_for_timestamp #sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'sql_mode=''skip-name-resolve back_log=1000 max_connections=1000 max_user_connections=7900 thread_cache_size=128 max_connect_errors=99999 wait_timeout=172800 interactive_timeout=172800 net_buffer_length=32K max_allowed_packet=1G max_heap_table_size=1G tmp_table_size=2M query_cache_type=2 query_cache_size=0 #query_cache_limit=1M performance_schema=1 event-scheduler=1 # disabled_storage_engines='BLACKHOLE,FEDERATED'group_concat_max_len=1048576 lock_wait_timeout=300 max_seeks_for_key=10000 ### logs general_log_file=/d/mysqldata/mysql3306/log/general.log log-error=/d/mysqldata/mysql3306/log/error.log log_error_verbosity=3 log_timestamps=SYSTEM slow_query_log slow_query_log_file=/d/mysqldata/mysql3306/log/slow-query.log long_query_time=0.3 log_slow_admin_statements=1 #log_slow_slave_statements=1 ##log_queries_not_using_indexes log-bin-index=/d/mysqldata/mysql3306/binlog/mysql-bin.index log-bin=/d/mysqldata/mysql3306/binlog/mysql-bin # relay-log-index=/d/mysqldata/mysql3306/relaylog/mysql-relay-bin.index relay-log=/d/mysqldata/mysql3306/relaylog/mysql-relay-bin # binlog_cache_size=256K max_binlog_size=512M # binlog-format=ROW binlog_row_image=minimal #can only use higher than 5.7.14 #binlog_group_commit_sync_delay=5 #can only use higher than 5.7.17 #binlog_group_commit_sync_no_delay_count=64 sync_binlog=1 expire_logs_days=10 ### replication server_id=92 log_slave_updates=1 log_bin_trust_function_creators=1 #auto_increment_increment=1 #auto_increment_offset=1 allow_suspicious_udfs sysdate-is-now gtid-mode=ON enforce-gtid-consistency # master_info_repository=TABLE relay_log_info_repository=TABLE relay_log_recovery=1 # plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"rpl_semi_sync_master_enabled=1 rpl_semi_sync_slave_enabled=1 rpl_semi_sync_master_timeout=10000 rpl_semi_sync_master_wait_no_slave=0 # slave_parallel_workers=4 slave_parallel_type=LOGICAL_CLOCK slave_preserve_commit_order=1 slave_pending_jobs_size_max=1G #buffer read_buffer_size=466K read_rnd_buffer_size=466K sort_buffer_size=932K join_buffer_size=233K ### innnodb innodb_buffer_pool_size=1638M innodb_buffer_pool_instances=8 innodb_max_dirty_pages_pct=85 innodb_sort_buffer_size=16M large-pages # innodb_data_home_dir=/d/mysqldata/mysql3306/innodb_ts innodb_data_file_path=ibdata1:128M:autoextend innodb_autoextend_increment=128 innodb_open_files=7168 innodb_file_per_table ##innodb temp innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G # innodb_flush_log_at_trx_commit=1 innodb_log_buffer_size=16M innodb_log_file_size=256M innodb_log_files_in_group=3 innodb_log_group_home_dir=/d/mysqldata/mysql3306/innodb_log innodb_adaptive_flushing_lwm=30 # innodb_read_io_threads=16 innodb_write_io_threads=8 innodb_io_capacity=1000 #for ssd innodb_flush_neighbors=0 #for ssd innodb_flush_method=O_DIRECT innodb_lru_scan_depth=256 innodb_purge_threads=8 # innodb_thread_concurrency=0 innodb_concurrency_tickets=1024 # innodb_lock_wait_timeout=300 # #innodb_rollback_on_timeout=1 #innodb_force_recovery=0 [mysqldump] quick max_allowed_packet = 1G [mysql] no-auto-rehash [myisamchk] key_buffer_size = 256M sort_buffer_size = 256M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166二、安装部署安装目录创建mkdir /d/mysqlbase/ ---程序目录 mkdir /d/mysqldata/mysql3306/ ---数据目录 把上面下载的Mysql安装包解压到/d/mysqlbase/,并重命名: tar -zxvf mysql-5.7.30-linux-glibc2.5-x86_64.tar.gz mv mysql-5.7.30-linux-glibc2.5-x86_64 mysql3306 创建各配置目录:(对应上面配置文件) cd /data/mysqldata/mysql3306/mkdir {binlog,innodb_log,innodb_ts,log,mydata,sock,relaylog,tmpdir}新增配置文件:(对应上面配置文件) vim my.cnf ls /d/mysqldata/mysql3306/ |grep my.cnf 创建mysql用户并授权: groupadd mysql useradd -g mysql mysql chown -R mysql:mysql /d/mysqldata//*chown -R mysql:mysql /data/mysqlbase/*12345678910111213141516171819202122初始化初始化: ./mysqld --defaults-file=/dad/mysqldata/mysql3306/my.cnf --initialize-insecure --user=mysql ----root密码为空 查看日志: [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set. 只有一个Warning信息,没用异常,说明初始化成功。123456三、启动测试用配置文件启动Mysql实例/d/mysqlbase/mysql3306/bin/mysqld_safe --defaults-file=/d/mysqldata/mysql3306/my.cnf.3306 2>&1 > /dev/null &1登陆Mysql实例/d/mysqlbase/mysql3306/bin/mysql -uroot -p -S /d/mysqldata/mysql3306/sock/mysql.sock1PS:由于前面初始化时加了参数–initialize-insecure,root密码为空,所以这里可以用root直接登陆,然后创建用户就好。三、总结Mysql实例已经安装部署完成,是不是特别简单快捷。同样的方法即可完成多实例的安装部署(只需修改相应的端口等信息)当然,Mysql安装部署是很基础的技能,还有很多种其他部署方式,大家有兴趣可以自行对比研究。哎哟,不错噢! - - - - - - 欢迎指出有误的地方以及补充更好的方法点赞2评论1分享收藏1手机看关注weixin_34273479的博客 86烂泥:mysql5.5多实例部署 本文由秀依林枫提供友情赞助,首发于烂泥行天下。 mysql5.5数据库多实例部署,我们可以分以下几个步骤来完成。 1、 mysql多实例的原理 2、 mysql多实例的特点 3、 mysql多实例应用场景 4、 mysql5.5多实例部署方法 一、mysql多实例的原理 mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如3306,3307),运行多个mysql服务进......蜗牛 @/"的成长之路 7829mysql多实例的安装和管理(一台服务器上运行两个mysql实例) mysql的多实例有两种方式可以实现,两种方式各有利弊。 第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便。 第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理。 下面就分别来实战这两种多实例的安装和管理先来学习第一种使用多个配置文件启动多个...merge_1126:写的真好,一看就会了 点赞昨天Zhu_Julian's Notes (朱显杰的技术博客) 3017[MySQL] MySQL的自动化安装部署 有过MySQL运维的人应该都清楚,线上的MySQL一般都采用源码编译,因为这样才可以根据企业的各自需要选择要编译的功能,虽然MySQL的源码编译挺简单的,但是试想一下,如果你有几百台服务器同时要安装MySQL,难道你还一台台去手动编译、编写配置文件吗?这显然太低效了,本文讨论MySQL的自动化安装部署。1、制作符合自己需求的RPM包我们要根据MySQL的源码编译符合企业需求的RPM包,源码...雨和你的故事 1503saltstack应用之批量部署mysql 应用环境:使用salt写了个自动部署mysql的配置配置管理文件,由于mysql的有版本号,端口等不确定属性,需要使用pillar来单独配置每个minion的属性。一,原始方法例如,需要在salt id为10.1.1.1-centos.game.web的服务器上部署mysql,版本号为5.5.25,实例有3个,3306,3307,3308, 正常情况下的流程是这样的:...安装部署Mysql实例(最简单快速噢)_南风TaT的博客-CSDN博客7-29安装部署Mysql实例(最简单快速噢)一、环境介质准备二、安装部署三、启动测试三、总结题外话作为Mysql DBA,我们平时必须要熟练的一个最最基础的技能,即安装部署Mysql...MySQL快速安装部署及配置_qq_36154886的博客-CSDN博客7-111.安装apache1.安装ap... qq_44584356的博客 911 K8S实战:如何快速在kubernetes集群上部署Mysql? 本文简单记录了本人第一次尝试在k8s集群上部署Mysql项目的...coco3600的博客 96MySQL多实例管理(mysqld_multi) MySQL多实例管理(mysqld_multi) 官方文档: https://dev.mysql.com/doc/refman/5.7/en/multiple-servers...weixin_34199405的博客 206MySQL 主从复制 + MySQL Router 部署测试 4个节点1、MySQLDB1 192.168.1.41 (MySQL 主节点)2、MySQLDB2 192.168.1.42 (MySQL从节点)3、MySQLDB3 192.168.1.43 (MySQL从节点)4、MySQLRouter 192.168.1.47 (MySQLRouter服务节点)软件版本说明:1、操作系统 CentOS6.6_x86_6...MySQL 5.7 多实例安装部署实例 - weweeeeeeee的博客12-20MySQL数据库的集中化运维,可以通过在一台服务器上,部署运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务。各个实例之间是相互独立的,每个...mysql单实例的安装和简单配置(5.1.*版本)_weixin_34310..._CSDN博客1-6cd /usr/src/ wget http://down1.chinaunix.net/distfiles/mysql-5.1.56.tar.gz tar zxf mysql-5.1.56.tar.gz cd mysql-5.1.56 ./configure--prefi...系统运维 90一个服务器启动两个mysql实例 在一台服务器上,可以通过mysqld_multi配置多个Mysql实例运行。假设服务器上现在已经运行一个MYSQL实例,数据目录是/var/lib/mysql,端口是3306,所用的SOCKET连接文件位于/tmp/mysql.sock。那么可以按照如下步骤,再启动一个或者多个实例。一,创建新实例的数据目录新启动MySQL实例之后,其数据位于哪个目录,就是实例相关的数据库文件都准备......xqandpan的专栏 6656Linux下MySql多实例免安装部署 目前,LAMP、LNMP是两套非常流行的开源Linux Web服务搭建方式。以免费高效著称,是很多网站和Web系统的首选服务器架构。 业务数据往往是很宝贵的资源,业务数据的损坏和丢失,对企业来讲是一个重大损失。因此,对业务数据做实时的备份和恢复显得尤为重要。 在LAMP平台和LNMP平台上,数据的存储主要是存储在MySql数据库上。MySql从3.23.15版本开始,提供了主从同步复制机制,通过复制机制,可以达到数据实时备份的目的。同时...如何利用脚本实现MySQL的快速部署以及一机多实例的部署..._CSDN博客10-13MySQL有三个版本:二进制,源码包,RPM。 下面讲讲二进制包的安装过程 下载地址:...定义好配置文件,就可进行MySQL数据库的快速部署以及一台服务器上多个实例的部署...mysql安装简易精华版_数据库_意大神-CSDN博客5-17这时候恭喜你,安装成功了,这时候我们需要修改一个简单的密码,比如123456第六步,修改自己想要的密码mysql -u root -p,然后输入密码,我的这个随机密码为上面红色...weixin_30617561的博客 523史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)... 转载请标明出处:https://www.fangzhipeng.com/springcloud/2017/07/12/sc07-config/本文出自方志朋的博客最新Finchley版本请访问:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f7-config/或者...MySQL多实例安装部署 - weixin_34075268的博客 - CSDN博客10-15MySQL多实例安装部署 2018-07-04 12:45:56 weixin...作为新手来说,这是一个最简单的人脸识别模型,难度不...入门教程:菜鸟教程(这个网站可以说是所有语言快速入门...MySQL 5.7 多实例安装部署实例_WGH100817的博客-CSDN博客1-6MySQL数据库的集中化运维,可以通过在一台服务器上,部署运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务。各个实例之间是相互独立的,每个...
W--wangzhiqiang
发表于2020-07-30 15:06:06
2020-07-30 15:06:06
最后回复
W--wangzhiqiang
2020-07-30 15:06:06
2581 0 -
转载https://blog.csdn.net/weixin_42777004/article/details/107658234?utm_medium=distribute.pc_category.none-task-blog-hot-5.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-5.nonecase&request_id=MySQL中的数据采用各种不同的技术存储在文件(或者内存)中。每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,我们能够获得额外的速度或者功能,从而改善喝提高应用的整体功能。当我们理解了引擎这个概念,就会知道提供各种不同引擎给你选择,然后用你选出来的引擎去处理sql语句MYSQL常用的四个数据库引擎:(1) ISAM:ISAM是一个定义明确的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。特性:1.读取操作的速度很快2.不占用大量的内存和存储资源缺点:不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。(2) MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。特性:1.不支持事物,MyISAM存储引擎不支持事物,所以对事物有要求的业务场景不能使用2.表级锁定,其锁定机制是表级索引,这虽然可以让锁定的现实成本很小但也是同时大大降低了其并发性能3.读写互相阻塞,不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读4.只会缓存因素,MyISAM可以通过key_buffer缓存以大大提高访问性能减少磁盘IO,但这个缓存区只会缓存索引,而不会缓存数据5.不能在表损坏后恢复数据。适用场景1.不需要事物支持(不支持事物)2.并发相对较低(锁定机制问题)3.数据修改相对较少(阻塞问题)4.以读为主(快速读取操作效率高)5.数据一致性要求不是非常高(3) InnoDB:在使用MYSQL的时候,我们所要面对的问题都是ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。尽管要比ISAM和 MyISAM引擎慢很多,但是InnoDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。特性:1.具有较好的事物支持,支持4个事物隔离级别,支持多版本读2.行级锁定,通过索引实现,全表扫描任然会是表锁,注意间隙锁的影响3.读写阻塞与事物隔离级别有关4.具有非常高效的缓存特性,能缓存索引,也能缓存数据5.整个表和主键以Cluster方式存储,组成一颗平衡树6.所有Secondary Index都会保存主键信息适用场景1.需要事物支持(具有较好的事物特性)2.行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成3.数据更新较为频繁的场景4.数据一致性要求较高5.硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽量减少磁盘IO(4) MEMORY: MEMORY是MySQL中一类特殊的存储引擎。**它使用存储在内存中的内容来创建表,而且数据全部放在内存中。**这些特性与前面的两个很不同。每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。值得注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要了,可以释放内存,甚至删除不需要的表。MEMORY默认使用哈希索引。速度比使用B型树索引快。 Note: MEMORY用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,所有数据都会消失。总结一下,在实际工作中,选择一个合适的存储引擎是一个比较复杂的问题,每个引擎都有自己的优缺点,往往是根据实际的业务场景来选择合适的引擎:(1) InnoDB:支持事务处理(高并发),支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。(2) MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。(3) MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。Note:同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。那么问题来了,要对引擎做一些操作,要怎么做呢:可以修改配置文件中的default-storage-engine。可以通过:show variables like ‘default_storage_engine’;查看当前数据库到默认引擎命令:show engines和show variables like 'have%'可以列出当前数据库所支持到引擎。其中Value显示为disabled的记录表示数据库支持此引擎,而在数据库启动时被禁用。可以使用下面语句来查询哪些存储引擎支持事物处理:select engine from information_chema.engines where transactions =‘yes’;可以通过engine关键字在创建或修改数据库时指定所使用到引擎。在创建表的时候通过engine=…或type=…来指定所要使用的引擎。show table status from DBname来查看指定表的引擎。以上是本农在近期的学习中的总结,希望各位看官给出宝贵意见~~
-
【转载华为云社区】MySQL数据库应用广泛,尤其对于JAVA程序员,不会陌生。如果在不想采购云数据库的情况下,可以自行安装MySQL数据库。文章将介绍,手动在CentOS7.4环境下,安装MySQL5.7版本的方法。首先安装依赖yum install libaio1、安装MySQL版本:5.7.25下载地址https://dev.mysql.com/downloads/mysql/5.7.html#downloads(随着时间的推移,请以最新的下载地址为准)3、使用wget命令使用断点传输的方式,下载相关rpm文件(如果地址有更新,请以最新为准)https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-common-5.7.25-1.el7.x86_64.rpmhttps://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-libs-5.7.25-1.el7.x86_64.rpmhttps://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-devel-5.7.25-1.el7.x86_64.rpmhttps://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client-5.7.25-1.el7.x86_64.rpmhttps://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-server-5.7.25-1.el7.x86_64.rpm4、下载完成后,进入到对应的目录中,进行依次安装(注意:安装有先后顺序,按照上面的下载顺序安装即可)rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm --force --nodeps(注意:其中--force --nodeps,要根据情况,适当添加。否则部分机器安装会出现异常)5、安装完成后,首先需要启动服务。(注意,CentOS7以上版本的服务启动,同6是不同的)systemctl start mysqld6、确认安装成功,创建初始root管理员密码修改 /etc/my.cnfvi /etc/my.cnf在[mysqld]中添加skip-grant-tables=1这一行配置让 mysqld 启动时不对密码进行验证7、重启 mysqld 服务systemctl restart mysqld8、修改root的登录密码1)使用 root 用户登录到 mysql mysql -uroot -p (直接点击回车,密码为空)2)切换数据库use mysql;3)更新 user 表update user set authentication_string = password('你的密码'), password_expired = 'N', password_last_changed = now() where user = 'root';刷新表数据flush privileges;退出\q9、编辑 /etc/my.cnf 文件,删除 skip-grant-tables=1 的内容vi /etc/my.cnf10、设置MySQL的编码,防止乱码产生,在[mysqld]下,添加编码方式character-set-server=utf8mb4 default_authentication_plugin=mysql_native_password sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION(具体可见附件文档)11、重启MySQL服务systemctl restart mysqld12、密码修改成功后,可以登录mysql,进行客户端连接设置。(备注:不设置的话,客户端Navicat无法连接)GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;FLUSH PRIVILEGES;退出\q12、重启MySQL服务systemctl restart mysqld通过客户端软件,例如Navicat for MySQL可以连接上数据库后,恭喜你,安装成功。【FAQ】1、在香港区的服务器CentOS下安装,出现服务无法启动的问题。[root@syne-hk-test mysql-5.7]# systemctl start mysqld Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.经过深入排查,原因是没有安装libaio.so.1,安装即可。yum install libaio2、有时候安装会遇到这样的问题initialize specified but the data directory has files in it. Aborting执行如下命令:cd /var/libmv mysql mysql.bak然后重新启动服务:systemctl restart mysqld3、解决only_full_group_by的办法,需要在my.cnf中添加sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION4、如果要卸载MySQL,可以使用下述方法查看已安装的mysqlrpm -qa | grep -i mysql卸载mysqlyum remove mysql-community-server-5.6.36-2.el7.x86_64
-
调优介绍 TuningKit是一款鲲鹏性能调优工具,本实践中使用Tuning Kit工具对MySQL所在系统执行系统配置全景分析、性能全景分析以及函数分析,找到性能瓶颈点,并根据分析结果进行优化修改,从而实现MySQL系统的性能增强。组网环境说明:本实践以TaiShan 200服务器(型号2280)+CentOS7.6组网举例,TuningKit在其他鲲鹏平台和操作系统上的操作类似。表格1 MySQL环境项目说明服务器TaiShan 200 服务器(型号2280)CPUKunpeng 920 4826OSCentOS 7.6应用MySQL 8.0.17调优工具TuningKit 2.2.0 表格 2 压力测试环境项目说明服务器TaiShan 200 服务器(型号2280)CPUKunpeng 920 4826OSCentOS 7.6压力测试工具Benchmark 5.0 前提条件1. 服务器和操作系统正常运行。2. PC端已经安装SSH远程登录工具。3. MySQL数据库已经安装完成,并启动。4. 压力测试环境和MySQL环境网络互通。5. 压力测试环境中Benchmark 5.0已经安装完成,并完成与MySQL数据库连接,可以进行压力测试。6. MySQL环境上TuningKit工具已经安装完成。调优思路1. 在进行调优之前,先用Benchmark工具测试MySQL在并发100个进程的性能数据。2. 使用TuningKit调优工具针对MySQL应用从函数分析、系统性能、系统配置维度进行性能分析。并根据性能分析结果得出性能瓶颈点以及优化方法。3. 针对性能瓶颈点分别进行性能优化。完成优化后,分别再用Benchmark工具测试MySQL并发100个进程的性能数据,与调优之前的性能进行对比,判断性能是否有提升。操作步骤调优前数据库性能测试Benchmark测试1. 进入Linux系统后台的BenchMark目录。cd /home/ BenchMarkSQL/run/2. 运行Benchmarksql程序。说明:参考鲲鹏社区https://support.huaweicloud.com/tstg-kunpengdbs/kunpengbenchmarksql_06_0004.html中的BenchMarkSQL测试MySQL章节,修改压测环境中Benchmark配置文件,包括数据库服务器地址、端口、数据库名称、数据库用户账号和密码等连接参数和进程并发参数loadWorkers。修改完配置文件后,执行./runDatabaseBuild.sh和./runBenchmark.sh 命令,运行benchmarksql程序,查看tpmTOTAL的值为138104 MySQL应用的热点函数性能调优热点函数分析3. 登录性能调优工具。4. 创建MySQL工程。 创建MySQL工程时,需要选择MySQL所在的服务器节点。5. 创建C/C++性能分析任务,配置参数如下图所示。 从分析结果中的热点函数列表中可以发现,MySQL运行的Top1热点函数queued_spin_lock_slowpath调用栈占用了超过一半的运行时间。 热点函数分析及优化方法热点函数分析:从C/C++性能分析的Top10函数列表中可以看出,内核热点函数queued_spin_lock_slowpath调用栈占用了超过一半的运行时间,内核函数queued_spin_lock_slowpath调用栈中,存在大量的futex_wait函数和futex_wake函数,则判断内核中的线程频繁的保持和唤醒spin lock锁,从而占用大量的运行时间。因此需要减少MySQL进程进入内核态的次数,避免spin lock被频繁保持和唤醒。优化方法:通过查看MySQL官方手册(https://dev.mysql.com/doc/refman/8.0/en/innodb-performance-spin_lock_polling.html)中关于spin_lock的介绍,,MySQL引入了innodb_spin_wait_delay参数,控制自旋锁时间,同时引入innodb_sync_spin_loops参数,控制自旋锁的循环次数。因此,可以用CPU计算资源换取MySQL进程内核态次数。即通过修改MySQL数据库配置文件,增加spin_loop的次数以及wait_delay的时间长度,防止自旋锁循环过快,尽量避免MySQL进程陷入内核态引起spin lock被频繁保持和唤醒,以此来调优MySQL性能。通过查看华为鲲鹏社区(https://support.huaweicloud.com/tngg-kunpengdbs/kunpengmysql8017_05_0015.html)中,对MySQL数据库参考调优中,将innodb_spin_wait_delay设置为180,innodb_sync_spin_loops设置为25,会达到最优性能。修改MySQL配置文件6. 修改mysql的配置文件 执行vi /etc/my.cnf 命令编辑配置文件,将tune中的参数做如下修改,防止进入系统自旋。 innodb_spin_wait_delay=180 innodb_sync_spin_loops=25 7. 执行重启MySQL命令,使配置文件生效。 /etc/init.d/mysql restart重启热点函数分析重新启动之前创建过的C/C++性能分析任务,任务执行结束后,发现spin_lock自旋热点函数被消除,函数执行时间由29.9秒降低到17.3秒。Benchmark测试8. 进入Linux系统后台的Benchmark运行目录。cd /home/ BenchMarkSQL/run/9. 执行./runBenchmark.sh命令,运行Benchmarksql程序。 查看tpmTOTAL的值由之前的138104变为当前的699282,性能提升明显。 系统配置和性能调优系统性能和配置全景分析10. 登录性能调优工具。11. 创建MySQL工程。创建MySQL工程时,需要选择MySQL所在的服务器节点。12. 创建系统性能全景分析任务,配置参数如下图所示。 13. 查看系统性能指标1. CPU利用率:从%soft参数值中,可以看到48号核的CPU服务软中断所花费时间占CPU总时间的99.71%,说明软中断集中在48号核上,需要做中断绑核优化。 2. 网络IO指标:观察网络设备统计数据,发现MySQL使用的网口每秒传输数据包和字节数超过基准值,按优化建议需要做网口中断绑核。 为了查看系统中有多少中断,以及中断在每个核上的分布情况,需要进一步执行配置全景分析。 14. 创建系统配置全景分析任务,配置参数如下图所示。 15. 检查系统硬件信息中的网卡中断NUMA绑核信息,可以看到有32个中断在numa node中随机分布。(中断NUMA绑核数据列表较多,可以下载到本地后查看) 中断绑核分析及优化方法中断绑核分析:1. 从系统性能全景分析结果,发现48号核的CPU服务软中断所花费时间占CPU总时间的99.71%,中断的分布不合理。同时网络设备统计中,网口每秒传输数据包和字节数超过基准值,按优化建议需要做网口中断绑核。2. 从配置全景分析结果中查看MySQL Server使用的网卡中断NUMA绑核信息,可以看到32个中断在numa node中是随机分布的,所以会导致多个中断都集中在某一个核上,还会有概率性跨numa_node和片的风险。优化方法: 根据中断NUMA绑核的优化建议和方法,进行网卡的中断绑核操作,将32个中断均匀绑定在一个node节点的24个核上。 使用cat /sys/class/net/enp189s0f0/device/numa_node命令查询数据库通信网卡设备靠近numa_node 2,所以可以将该网卡中断绑定在numa_node 2对应的24个核上。 网口中断绑核中断绑核方法一:手动执行绑核命令,对每个中断逐个绑核。工具的优化建议中有提供绑核步骤。中断绑核方法二:将绑核执行命令写入脚本中,循环多次,批量绑核。如下为已经写好的irq.sh绑核脚本(请参见附件),可以根据实际情况修改绑核规则。从脚本内容中可以看出将中断循环绑定到一个numa中24个核上。(Kunpeng920 4826机型一个numa_node有24个核) 16. 将irq.sh绑核脚本上传到MySQL Server目录下。1) 执行systemctl status irqbalance.service命令查询负载均衡的服务状态,如果服务状态为active状态,需要执行systemctl stop irqbalance.service命令,停止负载均衡服务。停止后,查询状态为inactive状态。 2)执行sh irq.sh enp189s0f0命令,将32个中断绑在一个node 节点的24个核上。 重启系统性能和配置全景分析任务1. 重启系统性能全景分析任务完成后,观察%soft指标(该指标表示CPU服务软中断所花费时间占CPU总时间的百分比),可以看到相比于中断绑核之前,软中断的处理分散在了绑定的核上。 2. 重启系统配置全景分析任务后,观察硬件信息的网卡指标。绑核前中断随机分配在numa节点的核上,会有概率性跨numa_node和片的风险,也可能集中占用某一个核;中断绑核后中断有序的固定在绑定的核上,中断处理分散在这些核上,提高了处理器的效率。绑核后中断分布如下所示。 Benchmark测试17. 进入Linux系统后台的Benchmark运行目录。 cd /home/ BenchMarkSQL/run/18. 执行./runBenchmark.sh命令运行Benchmarksql程序。 查看tpmTOTAL值由之前的699282变为当前的704005,性能有所提升。 调优结果分析本实践中,经过对MySQL系统进行了热点函数和中断绑核两次调优后,Benchmark测试MySQL的tpmTOTAL值从138104提升到704005,数据库性能提升410%。在进行其他应用调优时,需要根据性能调优工具采集分析的实际结果和对应的优化建议进行调优操作。具体的调优思路和调优过程,可以参考本实践。
-
-
如下图,在华为云RDS控制台可以看到binlog但是除了登录到控制台进行下载,是否有办法通过接口或者其他方式获取到binlog?另外binlog是存储在什么地方的?有没有可以配置存储到OBS中?
-
简介数据持久性和服务可用性是数据库服务的关键特征。在实践中,通常认为拥有 3 份数据副本,就足以保证持久性。但是 3 份副本,对于可用性的要求是不够的。维护 3 份一致的副本意味着,这些副本必须同时在线,系统才能保证可用。当数据库跨多个节点分片时,某些节点不可用的概率会随着节点数量的增加而呈指数增长。在 GaussDB(for MySQL) 中,我们针对日志和数据采用不同副本策略,并采用一种新颖的恢复算法,来解决可用性的问题。下面首先介绍写路径,然后介绍读路径,最后分析理论上的可用性估计,并与其它副本策略进行比较。写路径写路径如上图所示,下面对每一个步骤进行说明。1)用户事务导致对数据库页面的更改,从而生成描述更改的日志记录(redo log,下面简称 redo)。2)将 redo 写入到 Log Stores。写入 3 份副本,并且采用强一致性,即 3 份均写入成功才算成功。3)将事务标记为已提交(committed)。只要集群中有三个或以上的 Log Stores 可用,该数据库就可以进行写操作(因为写入只需要选择可用的节点即可,并不规定一定要写入某个节点)。对于成千上万个节点的群集,这实际上意味着 100% 的写入可用性。4)redo 写入 Log Stores 之后,会将此 redo 放入到 SAL 的 write buffer 中,之后将此 buffer 写入到管理对应 slice 的 Page Store 上。5)当任何一个 Page Store 副本返回成功,此写入成功,SAL 的 write buffer 被释放。6)不同的 Page Store 副本之间使用 gossip 协议检测和修复缺失的日志。空间回收数据库运行过程中,会源源不断地产生 redo 日志。如果不将不需要的 redo 删除,可以预见,最终肯定会耗尽磁盘空间。在成功将 redo 写入所有 Slice 副本,并且所有数据库的读副本(read replica)都可以看到该记录之后,就可以将该日志从 Log Store 中删除。独立地跟踪每条 redo 的持久性很费资源,因此我们选择基于 LSN 来跟踪持久性。对于 Page Store 的每个 slice,都有一个 persistent LSN,它的含义是 slice 接收到的所有日志记录中,保证连续(没有空洞)的最大 LSN。(譬如某个 slice 接收到 LSN 为 1 的 redo log 后,persistent LSN 变为 1,此时如果接收到 LSN 为 3 的 redo log,persistent LSN 依然为 1。之后如果接收到 LSN 为 2 的 redo log,即补齐了空洞之后, persistent LSN 变为 3)。7)SAL 可以通过定期调用 api 或者在读写接口中获取每个 slice 的 persistent LSN(在恢复中也会使用)。8)SAL 也会跟踪每个 PLog 的 LSN 范围。如果 PLog 中的所有 redo 的 LSN 都小于数据库 persistent LSN(3 副本中最小 persistent LSN),该 PLog 可被删除。通过上面的机制,我们能够保证每条 redo 都至少会有三个节点上存在副本(一开始在 Plog Store 节点上有 3 副本,保证在 Page Store 节点上有 3 副本之后,将 Plog Store 节点上的副本删除,以回收磁盘资源)。读路径数据库前端以 page 粒度读取数据。读取或者修改数据时,相应的 page 必须在 buffer pool 中。当 buffer pool 已满,我们又需要引入一个 page 时,必须将某些页面从 buffer pool 中淘汰。我们对淘汰算法进行了修改,保证只有当所有相关 redo 日志都写入至少 1 个 Page Store 副本后,脏页才能被淘汰。因此,在最新的 redo 记录到达 Page Store 之前,保证相应的页面可从 buffer pool 中获得。 之后,可以从 Page Store 中读取页面。对于每一个 slice,SAL 保存最新 redo log 的 LSN。主节点读取 page 时,读请求首先到达 SAL,SAL 会使用上述 LSN 下发读请求。读请求会被路由到时延最低的 Page Store。如果被选择的 Page Store 不可用或者还没有收到提供 LSN 之前的所有 redo,会返回错误。之后 SAL 会尝试下一个 Page Store,遍历所有副本,直到读请求可以被正确响应。可用性分析quorum replication目前业界最广泛使用的强一致性复制技术基于 quorum replication。如果每份数据在 N 个节点上存在副本,每个读取操作必须从NR个节点接收响应,并写入NW个节点。为了保证强一致性,必须满足 NR + NW > N 。业界许多系统使用 quorum replication 的不同组合方式。 例如,1)RAID1 磁盘阵列中通常使用 N = 3,NR = 1,NW = 3;2)PolarDB 中,N = 3,NR = 2,NW = 2;3)Aurora 中,N = 6,NR = 3,NW = 4。下面的分析中,仅考虑节点单独出现不可用的场景(不考虑譬如因为断点导致所有节点不可用的场景)。假设 1 个节点不可用的概率为 x,则当 N - NW + 1 到 N 个节点同时不可用时,写请求会失败。 即一个写请求失败的概率可用如下公式计算:同理,一个读请求失败的概率计算公式如下:GaussDB(for MySQL)写在前面的写路径一节中已经提到,GaussDB(for MySQL) 的写 redo,不需要写到特定的 Log Store 上,所以公式 (1) 并不适用。对于写请求,只有当所有 PLog Store 都不可用时,才会失败。如果集群中 Log Store 足够多,这个概率几乎接近于 0。读对于读,每个 Page Store 节点都可以基于其 persistent LSN 决定是否可以为读提供服务。如果不能,它将返回错误,告诉 SAL 尝试另一个节点。在极少数情况下,由于级联故障,没有节点可以提供读服务(并非节点不可用),SAL 会识别这种情况并使用 Log Store 来修复数据。在这种情况下,性能可能下降,但是存储层仍然可用。SAL 无法恢复的唯一情况是,包含 Slice 副本的所有 Page Store 都不可用,这样的概率是 x^3。下表对比了 GaussDB(for MySQL) 和几种典型 quorum replication 场景的可用性:结论1)对于写,GaussDB(for MySQL) 总是可用的,优于 quorum replication 方案;2)对于读,除了 x = 0.01 且 quorum 的节点个数为 6 的情况,GaussDB(for MySQL) 总是能提供比 quorum replication 相同或更好的的可用性。并且在上面的场景下,提供的可用性已经足够高,与 quorum replication 相差并不远。
-
华为云RDS for MySQL入门1.用户注册登录www.huaweicloud.com或点我跳转2.实例创建 3.操作步骤登录管理控制台。 ----》 云数据库单击管理控制台左上角的定位图标,选择区域和项目。选择“数据库 > 云数据库 RDS”。进入云数据库 RDS信息页面。在“实例管理”页面,单击“购买数据库实例”。在“服务选型”页面,选择计费模式,填写并选择实例相关信息后,单击“立即购买”。4.实例管理5.备份恢复 支持物理备份和逻辑备份两种方式,每天定时执行一次全量物理备份,同时每5分钟进行一次逻辑增量备份,备份存留时间可自定义。可以通过这些备份恢复到数据库的任意时间点。并能够根据备份文件快速创建备实例或只读实例。6.性能监控15个资源监控项,34个数据库监控项,自定义告警规则,能够监控整个实例集群的一举一动。7.DASDAS-标准版:SQL可视化8.数据迁移1.在线迁移支持通过多种网络链路,实现跨云平台数据库迁移、云下数据库迁移上云或云上跨Region的数据库迁移等多种业务场景特点:通过增量迁移技术,能够最大限度允许迁移过程中业务继续对外提供使用,有效的将业务系统中断时间和业务影响最小化,实现数据库平滑迁移.上云。2.数据同步数据同步在决然不同的系统之间实现关键业务数据的实时流动,不同于迁移,迁移数据库以整体搬迁为目的,同步是维持不同业务系统之间数据的持续流动,常见的场景是:实时分析、报表系统、数仓环境。特点:聚焦在表和数据,并满足多种同步灵活性的需要,如多对一,一对多,不同表名之间同步数据等3.多活灾备通过异地近实时的数据同步可以实现跨区,跨云,本地和云、混合云之间数据库形成灾备关系,提供一键主备切换、 数据比对、时延监控、数据补齐等容灾特性支持容灾演练、真实容灾等场景,支持主从灾备、主主灾备多种灾备架构。特点:异地远距离传输优化,围绕灾备提供特性,不同于业界基于简单的数据同步形成方案4.数据订阅获取数据库中的关键业务的数据变化信息常常是下游业务所需要的,数据订阅将这类信息缓存并提供统一的SDK接口,方便下游业务订阅、获取、并消费,从而实现数据库和下游系统解耦,业务流程解耦。常见的场景: kafka 订阅MySQL增量数据The end:更多相关资料欢迎查询华为云官方帮助文档:帮助文档
-
Day1+hw07745357+雪
-
mysql的性能优化包罗甚广:索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)等等。这里的记录的优化技巧更适用于开发人员,都是从网络上收集和自己整理的,主要是查询语句上面的优化,其它层面的优化技巧在此不做记录。流程:执行时间检查的行数返回的行数建立索引的几个准则:1、合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度。2、索引越多,更新数据的速度越慢。3、尽量在采用MyIsam作为引擎的时候使用索引(因为MySQL以BTree存储索引),而不是InnoDB。但MyISAM不支持Transcation。4、当你的程序和数据库结构/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺利解决,那就是应该考虑使用诸如memcached这样的分布式缓存系统的时候了。5、习惯和强迫自己用EXPLAIN来分析你SQL语句的性能。1. count的优化比如:计算id大于5的城市a. select count(*) from world.city where id > 5;b. select (select count(*) from world.city) – count(*) from world.city where id <= 5;a语句当行数超过11行的时候需要扫描的行数比b语句要多, b语句扫描了6行,此种情况下,b语句比a语句更有效率。当没有where语句的时候直接select count(*) from world.city这样会更快,因为mysql总是知道表的行数。2. 避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。在程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;算法的结构尽量简单;在查询时,不要过多地使用通配符如 SELECT * FROM T1语句,要用到几列就选择几列如:SELECT COL1,COL2 FROM T1;在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,COL3 FROM T1,因为某些情况下用户是不需要那么多的数据的。不要在应用中使用数据库游标,游标是非常有用的工具,但比使用常规的、面向集的SQL语句需要更大的开销;按照特定顺序提取数据的查找。3. 索引字段上进行运算会使索引失效。尽量避免在WHERE子句中对字段进行函数或表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:SELECT * FROM T1 WHERE F1/2=100 应改为: SELECT * FROM T1 WHERE F1=100*24. 避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等这样的操作符.因为这会使系统无法使用索引,而只能直接搜索表中的数据。例如: SELECT id FROM employee WHERE id != “B%” 优化器将无法通过索引来确定将要命中的行数,因此需要搜索该表的所有行。在in语句中能用exists语句代替的就用exists.5. 尽量使用数字型字段.一部分开发人员和数据库管理人员喜欢把包含数值信息的字段设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。6. 合理使用EXISTS,NOT EXISTS子句。如下所示:1.SELECT SUM(T1.C1) FROM T1 WHERE (SELECT COUNT(*)FROM T2 WHERE T2.C2=T1.C2>0)2.SELECT SUM(T1.C1) FROM T1WHERE EXISTS(SELECT * FROM T2 WHERE T2.C2=T1.C2)两者产生相同的结果,但是后者的效率显然要高于前者。因为后者不会产生大量锁定的表扫描或是索引扫描。如果你想校验表里是否存在某条纪录,不要用count(*)那样效率很低,而且浪费服务器资源。可以用EXISTS代替。如:IF (SELECT COUNT(*) FROM table_name WHERE column_name = ‘xxx’)可以写成:IF EXISTS (SELECT * FROM table_name WHERE column_name = ‘xxx’)7. 能够用BETWEEN的就不要用IN8. 能够用DISTINCT的就不用GROUP BY9. 尽量不要用SELECT INTO语句。SELECT INTO 语句会导致表锁定,阻止其他用户访问该表。10. 必要时强制查询优化器使用某个索引SELECT * FROM T1 WHERE nextprocess = 1 AND processid IN (8,32,45) 改成:SELECT * FROM T1 (INDEX = IX_ProcessID) WHERE nextprocess = 1 AND processid IN (8,32,45)则查询优化器将会强行利用索引IX_ProcessID 执行查询。11. 消除对大型表行数据的顺序存取尽管在所有的检查列上都有索引,但某些形式的WHERE子句强迫优化器使用顺序存取。如:SELECT * FROM orders WHERE (customer_num=104 AND order_num>1001) OR order_num=1008解决办法可以使用并集来避免顺序存取:SELECT * FROM orders WHERE customer_num=104 AND order_num>1001 UNION SELECT * FROM orders WHERE order_num=1008这样就能利用索引路径处理查询。【jacking 数据结果集很多,但查询条件限定后结果集不大的情况下,后面的语句快】12. 尽量避免在索引过的字符数据中,使用非打头字母搜索。这也使得引擎无法利用索引。见如下例子:SELECT * FROM T1 WHERE NAME LIKE ‘%L%’SELECT * FROM T1 WHERE SUBSTING(NAME,2,1)=’L’SELECT * FROM T1 WHERE NAME LIKE ‘L%’即使NAME字段建有索引,前两个查询依然无法利用索引完成加快操作,引擎不得不对全表所有数据逐条操作来完成任务。而第三个查询能够使用索引来加快操作,不要习惯性的使用 ‘%L%’这种方式(会导致全表扫描),如果可以使用`L%’相对来说更好;13. 虽然UPDATE、DELETE语句的写法基本固定,但是还是对UPDATE语句给点建议:a) 尽量不要修改主键字段。b) 当修改VARCHAR型字段时,尽量使用相同长度内容的值代替。c) 尽量最小化对于含有UPDATE触发器的表的UPDATE操作。d) 避免UPDATE将要复制到其他数据库的列。e) 避免UPDATE建有很多索引的列。f) 避免UPDATE在WHERE子句条件中的列。14. 能用UNION ALL就不要用UNIONUNION ALL不执行SELECT DISTINCT函数,这样就会减少很多不必要的资源在跨多个不同的数据库时使用UNION是一个有趣的优化方法,UNION从两个互不关联的表中返回数据,这就意味着不会出现重复的行,同时也必须对数据进行排序,我们知道排序是非常耗费资源的,特别是对大表的排序。UNION ALL可以大大加快速度,如果你已经知道你的数据不会包括重复行,或者你不在乎是否会出现重复的行,在这两种情况下使用UNION ALL更适合。此外,还可以在应用程序逻辑中采用某些方法避免出现重复的行,这样UNION ALL和UNION返回的结果都是一样的,但UNION ALL不会进行排序。15. 字段数据类型优化:a. 避免使用NULL类型:NULL对于大多数数据库都需要特殊处理,MySQL也不例外,它需要更多的代码,更多的检查和特殊的索引逻辑,有些开发人员完全没有意识到,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默认值。b. 尽可能使用更小的字段,MySQL从磁盘读取数据后是存储到内存中的,然后使用cpu周期和磁盘I/O读取它,这意味着越小的数据类型占用的空间越小,从磁盘读或打包到内存的效率都更好,但也不要太过执着减小数据类型,要是以后应用程序发生什么变化就没有空间了。修改表将需要重构,间接地可能引起代码的改变,这是很头疼的问题,因此需要找到一个平衡点。c. 优先使用定长型16. 关于大数据量limit分布的优化见下面链接(当偏移量特别大时,limit效率会非常低):http://ariyue.iteye.com/blog/553541附上一个提高limit效率的简单技巧,在覆盖索引(覆盖索引用通俗的话讲就是在select的时候只用去读取索引而取得数据,无需进行二次select相关表)上进行偏移,而不是对全行数据进行偏移。可以将从覆盖索引上提取出来的数据和全行数据进行联接,然后取得需要的列,会更有效率,看看下面的查询:mysql> select film_id, description from sakila.film order by title limit 50, 5;如果表非常大,这个查询最好写成下面的样子:mysql> select film.film_id, film.description from sakila.filminner join(select film_id from sakila.film order by title liimit 50,5) as film usinig(film_id);17. 程序中如果一次性对同一个表插入多条数据,比如以下语句:insert into person(name,age) values(‘xboy’, 14);insert into person(name,age) values(‘xgirl’, 15);insert into person(name,age) values(‘nia’, 19);把它拼成一条语句执行效率会更高.insert into person(name,age) values(‘xboy’, 14), (‘xgirl’, 15),(‘nia’, 19);18. 不要在选择的栏位上放置索引,这是无意义的。应该在条件选择的语句上合理的放置索引,比如where,order by。SELECT id,title,content,cat_id FROM article WHERE cat_id = 1;上面这个语句,你在id/title/content上放置索引是毫无意义的,对这个语句没有任何优化作用。但是如果你在外键cat_id上放置一个索引,那作用就相当大了。19. ORDER BY语句的MySQL优化:a. ORDER BY + LIMIT组合的索引优化。如果一个SQL语句形如:SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort] LIMIT [offset],[LIMIT];这个SQL语句优化比较简单,在[sort]这个栏位上建立索引即可。b. WHERE + ORDER BY + LIMIT组合的索引优化,形如:SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [VALUE] ORDER BY [sort] LIMIT [offset],[LIMIT];这个语句,如果你仍然采用第一个例子中建立索引的方法,虽然可以用到索引,但是效率不高。更高效的方法是建立一个联合索引(columnX,sort)c. WHERE + IN + ORDER BY + LIMIT组合的索引优化,形如:SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] IN ([value1],[value2],…) ORDER BY [sort] LIMIT [offset],[LIMIT];这个语句如果你采用第二个例子中建立索引的方法,会得不到预期的效果(仅在[sort]上是using index,WHERE那里是using where;using filesort),理由是这里对应columnX的值对应多个。目前哥还木有找到比较优秀的办法,等待高手指教。d.WHERE+ORDER BY多个栏位+LIMIT,比如:SELECT * FROM [table] WHERE uid=1 ORDER x,y LIMIT 0,10;对于这个语句,大家可能是加一个这样的索引:(x,y,uid)。但实际上更好的效果是(uid,x,y)。这是由MySQL处理排序的机制造成的。最后,你可以使用explain关键字去判断和评测一个sql语句是否还有优化的可能性,关于它的详细使用请参考mysql手册。
-
RDS MYSQL实例配置:4vCPU 16GB内存,100G超高IO硬盘,MYSQL版本:5.7有8个微服务应用,共注册运行了16个微服务,连接此数据库实现中台系统业务。mysql实例优化前内存占用稳定在85左右:重启mysql实例后,效果如下:
-
文字转载:CSDN:https://blog.csdn.net/u014148630/article/details/101712264RDS for MySQL实例支持两种数据库账号:高权限账号和普通账号。在控制台管理所有账号和数据库,账号拥有的具体权限请参见文末账号权限列表。一、账号类型1、高权限账号 :只能通过控制台或API创建和管理。一个实例中只能创建一个高权限账号,可以管理所有普通账号和数据库。开放了更多权限,可满足个性化和精细化的权限管理需求,例如可按用户分配不同表的查询权限。可以断开任意账号的连接。2、普通账号 :可以通过控制台、API或者SQL语句创建和管理。一个实例可以创建最多200个普通账号 。需要手动给普通账号授予特定数据库的权限。普通账号不能创建和管理其他账号,也不能断开其他账号的连接。账号类型 建库数量 建表数量 用户数高权限账号 不限 <20万 与实例内核参数相关普通权限账号 500 <20万 与实例内核参数相关二、高权限账号权限和Super权限区别为了减少误操作对业务的影响,RDS for MySQL不提供Super权限,只能使用高权限账号管理所有普通账号和数据库,具体区别如下:高权限账号具体权限请参见账号权限列表。可以kill普通账号连接。show processlist只能看到本账号的线程。Super权限可以kill任何查询的连接。show processlist可以看到所有的线程。可以使用修改全局变量的SET语句(可以随意改所有参数)。可以使用CHANGE MASTER、PURGE MASTER LOGS命令。可以对主机内文件进行操作。更多参阅数据库帮助文档三、创建高权限账号登录RDS控制台。在页面左上角,选择实例所在地域。找到目标实例,单击实例ID。在左侧导航栏中选择账号管理。单击创建账号。设置以下参数:四、重置账号权限如果高权限账号自身出现问题,例如权限被意外回收(REVOKE ),您可以通过输入高权限账号的密码来重置高权限账号的权限,使其恢复正常。登录RDS控制台。在页面左上角,选择实例所在地域。找到目标实例,单击实例ID。在左侧导航栏中单击账号管理。单击高权限账号右侧的重置账号权限。输入高权限账号密码,重置账号权限。五、创建普通账号登录RDS控制台。在页面左上角,选择实例所在地域。找到目标实例,单击实例ID。在左侧导航栏中单击账号管理。单击创建账号。设置以下参数六、创建数据库登录RDS控制台。在页面左上角,选择实例所在地域。找到目标实例,单击实例ID。在左侧导航栏中单击数据库管理。单击创建数据库。设置下面的参数七、账号权限列表常见问题创建的账号在只读实例上可以用吗?答:主实例创建的账号会同步到只读实例,只读实例无法管理账号。账号在只读实例上只能进行读操作,不能进行写操作。更多参阅数据库帮助文档
-
文章转载自CSDN:https://blog.csdn.net/u014148630/article/details/101712264RDS for MySQL实例支持两种数据库账号:高权限账号和普通账号。在控制台管理所有账号和数据库,账号拥有的具体权限请参见文末账号权限列表。一、账号类型1、高权限账号 :只能通过控制台或API创建和管理。一个实例中只能创建一个高权限账号,可以管理所有普通账号和数据库。开放了更多权限,可满足个性化和精细化的权限管理需求,例如可按用户分配不同表的查询权限。可以断开任意账号的连接。2、普通账号 :可以通过控制台、API或者SQL语句创建和管理。一个实例可以创建最多200个普通账号 。需要手动给普通账号授予特定数据库的权限。普通账号不能创建和管理其他账号,也不能断开其他账号的连接。账号类型 建库数量 建表数量 用户数高权限账号 不限 <20万 与实例内核参数相关普通权限账号 500 <20万 与实例内核参数相关二、高权限账号权限和Super权限区别为了减少误操作对业务的影响,RDS for MySQL不提供Super权限,只能使用高权限账号管理所有普通账号和数据库,具体区别如下:高权限账号具体权限请参见账号权限列表。可以kill普通账号连接。show processlist只能看到本账号的线程。Super权限可以kill任何查询的连接。show processlist可以看到所有的线程。可以使用修改全局变量的SET语句(可以随意改所有参数)。可以使用CHANGE MASTER、PURGE MASTER LOGS命令。可以对主机内文件进行操作。更多参阅数据库帮助文档三、创建高权限账号登录RDS控制台。在页面左上角,选择实例所在地域。找到目标实例,单击实例ID。在左侧导航栏中选择账号管理。单击创建账号。设置以下参数:四、重置账号权限如果高权限账号自身出现问题,例如权限被意外回收(REVOKE ),您可以通过输入高权限账号的密码来重置高权限账号的权限,使其恢复正常。登录RDS控制台。在页面左上角,选择实例所在地域。找到目标实例,单击实例ID。在左侧导航栏中单击账号管理。单击高权限账号右侧的重置账号权限。输入高权限账号密码,重置账号权限。五、创建普通账号登录RDS控制台。在页面左上角,选择实例所在地域。找到目标实例,单击实例ID。在左侧导航栏中单击账号管理。单击创建账号。设置以下参数六、创建数据库登录RDS控制台。在页面左上角,选择实例所在地域。找到目标实例,单击实例ID。在左侧导航栏中单击数据库管理。单击创建数据库。设置下面的参数七、账号权限列表常见问题创建的账号在只读实例上可以用吗?答:主实例创建的账号会同步到只读实例,只读实例无法管理账号。账号在只读实例上只能进行读操作,不能进行写操作。更多参阅数据库帮助文档
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签