mysql数据库

mysql(五)-----keepalived配置mysql的高可用

不打扰是莪最后的温柔 提交于 2020-03-27 23:19:15
生产环境对数据库要求很高的,为了避免数据库的突发情况,给他做个保险--用keepalived做高可用 环境(此处ip,密码均是乱造的): 主:192.1.31.161 端口:3306 用户:vnum 密码:vnum@123 从:192.1.31.162 端口:3306 方案介绍 两台mysql互为主从,但只有master写,slave只负责读。主从通过keepalive做成高可用,当master出问题, 由slave接替master工作,即读写都在slave操作。当master恢复正常,master自动同步故障时间段数据,接替slave的写工作。 一:配置主主同步 、配置文件 master my.cnf 主要参数 log_slave_updates log-bin = mysql-bin server-id = 1 binlog-ignore-db=mysql #auto_increment_increment = 2 #auto_increment_offset = 2 slave my.cnf 主要参数 log_slave_updates log-bin = mysql-bin server-id = 2 binlog-ignore-db=mysql #auto_increment_increment = 2 #auto_increment_offset = 1 注: log

MySQL涉及锁的问题

给你一囗甜甜゛ 提交于 2020-03-27 16:12:37
如何并发的访问数据库呢?答案就是 加锁 。 接下来说一下, 数据库的锁机制,数据库中都有哪些锁?    首先呢,锁是一种 并发控制技术 ,锁是用来在多个用户同时访问同一个数据的时候保护数据的。 有2种基本的锁类型:    共享(S)锁: 多个事务可封锁一个共享页;任何事务都不能修改该页;通常是该页被读取完毕,S锁立即被释放。在执行select语句的时候需要给操作对象(表或一些记录)加上共享锁,但加锁之前需要检查是否有排他锁,如果没有,则可以加共享锁(一个对象上可以加N个共享锁),否则不行。共享锁通常在执行完select语句之后被释放,当然也可能是在事务结束(包括正常结束和异常结束)的时候被释放,主要取决与数据库所设置的事务隔离级别。    排它(X)锁: 仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。执行insert、update、delete语句的时候需要给操作的对象加排它锁,在加排他锁之前必须确认该对象上没有其他任何锁,一旦加上排它锁之后,就不能再给这个对象加其他任何锁。排它锁的释放通常是在事务结束的时候(当然也有例外,就是在数据库事务隔离级别被设置为Read Uncommitted(读未提交数据)的时候,这种情况下排他锁会在执行完更新操作之后被释放,而不是在事务结束的时候)。 按锁的机制 既然使用了锁

MySQL引擎的和区别

狂风中的少年 提交于 2020-03-27 11:52:03
转载自 https://m.nowcoder.com/tutorial/93/8ac75a692a3b4b0a868796b9f008bc2c MySQL引擎 MySQL中的数据用各种不同的技术存储在文件(或内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧和锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或功能,从而改善你的应用的总体功能。 数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 MySQL存储引擎主要有:MyISAM、InnoDB、Memory、Blackhole、CSV、Performance_Schema、Archieve、Federated、Mrg_Myiasm. 但是最常用的是InnoDB和MyISAM。 InnoDB InnoDB是一个事务型的存储引擎,有行级锁定和外键约束。 InnoDB引擎提供了对数据库ACID事务的支持,并且实现了SQL的四种隔离级别。 该引擎还提供了行级锁定和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时InnoDB会在内存中建立缓冲池,用于缓冲数据和索引。 但是该引擎不支持FULLTEXT类型的索引 而且它没有保存表的行数

MySQL 常见面试题

家住魔仙堡 提交于 2020-03-27 10:54:50
MySQL常见的两种存储引擎:MyISAM与InnoDB Mysql索引使用的数据结构主要有BTree索引 和 哈希索引 。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。 Mysql的BTree索引使用的是B数中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。   MyISAM: B+Tree叶节点的data域存放的是数据记录的地址。在索引检索的时候,首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址读取相应的数据记录。这被称为“非聚簇索引”。   InnoDB: 其数据文件本身就是索引文件。相比MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按B+Tree组织的一个索引结构,树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。这被称为“聚簇索引(或聚集索引)”。而其余的索引都作为辅助索引,辅助索引的data域存储相应记录主键的值而不是地址,这也是和MyISAM不同的地方。在根据主索引搜索时,直接找到key所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,在走一遍主索引。 因此,在设计表的时候

自动部署MySQL5.7.x.rpm

爱⌒轻易说出口 提交于 2020-03-27 09:31:51
博主本人热爱学习,读者阅读过程中如果发现有错误的地方或是有更好的实现方式,请与本人联系(qq:1805608587),或是在评论区留言,谢谢! 文章说明:本文是作者原创,请尊重个人劳动成果,转载需注明出处 要求:rpm包已经上传至/opt/mysql目录下面,现在需要自动安装MySQL,并且将root初始密码设置成为123456。 背景:连续帮忙几个同事安装了MySQL,感觉挺烦人的,于是就写了自动化部署脚本。再有人过来找我,我就让他们自己上传软件包跑脚本。 参考代码: #!/bin/bash package_dir="/opt/mysql" cd ${package_dir} server=`find -maxdepth 1 -name '*mysql*'|grep server|awk -F "/" '{print $2}'` client=`find -maxdepth 1 -name '*mysql*'|grep client|awk -F "/" '{print $2}'` echo $server echo $client function install_mysql(){ echo "正在安装MySQL-server..." echo "" echo "正在卸载系统自带数据库" yum remove all mysql -y rm -rf /var/lib/mysql

Dapper操作MySQL数据库获取JSON数据中文乱码

我只是一个虾纸丫 提交于 2020-03-27 08:25:03
前言 在项目中利用Dapper将JSON数据存储到MySQL数据库,结果发现JSON数据中的中文乱码,特此记录,希望对存储JSON的童鞋能有所帮助,文中若有错误之处,还望批评指正。 Dapper获取JSON数据乱码(MySQL) 为了引出最终问题出在什么地方,我们重头开始进行讲解,首先我们给出如下测试实体以及在数据库中的表,如下: public class Test { public int Id { get; set; } public string Data { get; set; } } 为了数据操作方便,我们通过包【Dapper.SimpleCRUD】来操作,插入数据和查询数据如下: static void Main(string[] args) { SimpleCRUD.SetDialect(SimpleCRUD.Dialect.MySQL); DefaultTypeMap.MatchNamesWithUnderscores = true; using (var conn = new MySqlConnection(@".....;charset=utf8mb4;SslMode=none;")) { var id = conn.Insert(new Test() { Data = JsonConvert.SerializeObject(new { name = "汪鹏"

【mysql报错】MySQL5.7.27报错[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated

女生的网名这么多〃 提交于 2020-03-26 23:54:17
mysql5.7.27在运行更新语句时出现如下情况,mysql5.6之前没有这种情况出现。 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 原因 mysql5.7.5后,ONLY_FULL_GROUP_BY 默认为真,那么此时select中的字段必须出现在group by中,但是我们使用的语句时5.6的就语句。所以显而易见,旧新版本的问题。 你可以使用语句查询自己数据库的版本 SELECT VERSION(); 解决方法 先查看sql_mode SHOW VARIABLES LIKE 'sql_mode'; 查询结果如下 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO

用 Docker 启动 MySQL

烈酒焚心 提交于 2020-03-26 23:38:14
3 月,跳不动了?>>> 事情是这样的,我们已经把项目交付给了甲方,甲方还想进一步开发,但是我们的报价让甲方不满意。甲方就找了其他人开发。讲真,一分钱一分货,那伙人把服务器搞摊跑路了,各种服务全挂了。 要知道,把他们搞坏的修好,还不如重装系统比较快,何况是云服务器。 我复制下来数据库的文件们,大概长这样。 因为是 mysql 5.7 的数据库。先下载一个镜像。 docker pull mysql:5 然后在这个目录启动起来。 docker run -d \ --name mysql \ -v $PWD:/var/lib/mysql \ -p 3306:3306 \ mysql:5 Can’t open the mysql.plugin table. Please run mysql_upgrade to create it. 出现这个错误启动不起来时,可能是 MySQL 版本问题,我用的版本比之前的低了,5.7 用了 5.6 的 MySQL,报错直接退出了。 然后进入容器看看。 docker exec -it mysql bash 这时候我发现我不能连接数据库,因为密码不对,不管是啥原因,反正是不对,我猜是跑路那群人把密码改了(有点腹黑),然后就要 skip-grant-tables ,但是发现没有 vi。 没关系,办法总比困难多。 复制出来改。 docker cp mysql:

Linux(CentOS7)使用 RPM 安装 mysql 8.0.11

荒凉一梦 提交于 2020-03-26 19:37:26
一、安装准备工作 1、查看 Linux 相关信息(Linux 命令行操作) (1)查看 Linux 版本,用于下载对应的 mysql。 【查看 Linux 信息:】 uname -a (2)检查是否已经安装过 mysql。 【检查 mysql 是否被安装】 rpm -qa | grep -i mysql 若安装过,会输出相关包名 【若有安装过 mysql,则删除相关文件】 rpm -e [--nodeps] 包名(此处包名是上面命令查出来的名字) 2、下载 mysql (1)官网地址 【官网地址:】 https://downloads.mysql.com/archives/community/ https://downloads.mysql.com/archives/get/p/23/file/mysql-community-libs-8.0.11-1.el7.x86_64.rpm https://downloads.mysql.com/archives/get/p/23/file/mysql-community-common-8.0.11-1.el7.x86_64.rpm https://downloads.mysql.com/archives/get/p/23/file/mysql-community-server-8.0.11-1.el7.x86_64.rpm https:/

Centos 7 安装 MySQL

筅森魡賤 提交于 2020-03-26 14:42:33
因为数据库老师要求在 Linux 环境下运行 MySQL,虚拟机又太卡,所以干脆装在云服务器上了。按照 官网的教程 一步步走下来,没遇到什么问题,所以这篇博客并没有什么技术含量,只是记录一下主要步骤。包管理工具用的是 docker。 1. 下载 MySQL Server 的 Docker 镜像 docker pull mysql/mysql-server:tag 2. 启动 MySQL Server 实例 docker run --name=mysql1 -d mysql/mysql-server:8.0 3. 查看 log (初始密码 GENERATED ROOT PASSWORD 在里面) docker logs mysql1 4. 登陆 MySQL Server docker exec -it mysql1 mysql -uroot -p 5. 第一次登陆要修改密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 来源: https://www.cnblogs.com/truelycloud/p/12574009.html