• 关于

    数据库管理系统结构无法连接

    的搜索结果

回答

详细解答可以参考官方帮助文档 对于数据可靠性有强需求的业务场景或是有监管需求的金融业务场景,RDS 提供异地灾备实例,帮助用户提升数据可靠性。 背景介绍 RDS 通过数据传输服务(DTS)实现主实例和异地灾备实例之间的实时同步。主实例和灾备实例均搭建主备高可用架构,当主实例所在区域发生突发性自然灾害等状况,主节点(Master)和备节点(Slave)均无法连接时,可将异地灾备实例切换为主实例,在应用端修改数据库链接地址后,即可快速恢复应用的业务访问。 灾备实例可通过 DTS 管理控制台实现同步对象变更、同步速度设置、延迟报警等同步链路原生功能,详细信息请参见 DTS 产品文档。 灾备实例拓扑图如下图所示。 灾备实例还有以下功能特点: 提供独立的数据库连接地址,由用户应用端自助控制连接。 使用主备高可用架构。 支持按小时计费,即开即用,即停即止。 提供独立的白名单配置,账号管理。 计费说明 RDS 灾备实例与主实例配置完全相同,且 RDS 通过数据传输实现主实例和异地灾备实例之间的实时同步。因此,创建灾备实例会同时产生 RDS 和 DTS 两种费用,价格详情请分别参见云数据库 RDS 详细价格信息和数据传输详细价格信息。 前提条件 当前灾备实例只支持数据库类型为 MySQL 的 RDS 实例。 要创建灾备实例,主实例要求 MySQL 5.6 及以上版本。在升级主实例版本前,请做好兼容性测试;或者新建一个 MySQL 5.6 的实例,将数据从主实例复制到新建实例,再在新建实例上创建灾备实例。 创建灾备实例的主实例必须要有内网地址。 功能限制 灾备实例有以下功能限制: 出于同步链路自身稳定性的需要,灾备实例仅支持创建只读权限的账号。 不支持备份设置、备份恢复、数据迁移、数据库管理、申请外网访问地址、修改连接地址功能。 操作步骤 登录 RDS 管理控制台,选择目标实例。 选择菜单中的 基本信息,单击 实例分布中的 添加灾备实例,如下图所示。 在 创建同步作业 页面单击 立即购买实例,购买灾备实例,如下图所示。 参数说明如下: 同步作业名称:同步作业任务名称,可以保持默认 实例 ID(本地实例信息):本地实例的 ID。系统自动关联当前实例 ID,您也可通过单击 其他阿里云账号下的RDS实例,填写 RDS 实例 ID、数据库账号和对应的 密码 实例 ID(目标实例信息):灾备实例的 ID。单击 立即购买实例 购买灾备实例 在 目标RDS实例购买 窗口选择实例所在地域,单击 立即购买,如下图所示。 购买灾备实例暂仅支持选择地域,其余设置信息默认与主实例一致。若有灾备实例升级需求,可在创建成功后在 RDS 管理控制台 对灾备实例进行变更配置。 说明 创建灾备实例需要数分钟时间,在此期间请勿关闭该窗口,否则灾备实例可能会创建失败。 灾备实例购买成功后,实例 ID 自动添加到目标实例 ID 中,单击 授权白名单并进入下一步,如下图所示。 系统自动创建迁移账号,创建完成后,单击 下一步,如下图所示。 说明 灾备实例上会自动生成名称为 dtssyncwriter 的账号供 DTS 同步使用,请勿对该账号进行任何修改或删除操作,否则将引起同步异常。 在 源库对象 中选择要迁移的对象,单击 >将要迁移的对象放入 已选择对象中,单击 下一步,如下图所示。 选择 同步初始化 类型并设置 同步速度,单击 预检查并启动,如下图所示。 参数说明如下: 同步初始化:将本地实例中同步对象的结构及数据迁移一份到灾备实例中,作为后续增量同步数据的基础。同步初始化有结构初始化和全量数据初始化可选,首次同步数据时,两者均需选择。 同步速度:设置主实例和灾备实例间的同步速率,保护主实例的正常业务,单位为 TPS。如果保持默认不填,则同步速度为数据传输服务的性能上限。 说明 以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 12。 系统显示预检查结果,如下图所示。 单击 检测结果 为失败的检测项后的 !,查看失败详细信息,根据失败详细信息完成错误排查。 错误排查完毕后,在 同步作业列表页面,单击当前同步任务后的 启动同步,如下图所示。 系统预检查通过后,单击 确定,自动启动同步任务,如下图所示。 在 DTS 数据同步列表页面可以查询创建的同步任务,并可以对同步任务进行修改同步对象、设置监控报警、修改同步速度等操作,详情请参见 DTS 产品文档。 说明 为保障灾备实例数据的实时性,请不要暂停同步灾备实例的同步任务。

2019-12-01 22:57:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 对于数据可靠性有强需求的业务场景或是有监管需求的金融业务场景,RDS 提供异地灾备实例,帮助用户提升数据可靠性。 背景介绍 RDS 通过数据传输服务(DTS)实现主实例和异地灾备实例之间的实时同步。主实例和灾备实例均搭建主备高可用架构,当主实例所在区域发生突发性自然灾害等状况,主节点(Master)和备节点(Slave)均无法连接时,可将异地灾备实例切换为主实例,在应用端修改数据库链接地址后,即可快速恢复应用的业务访问。 灾备实例可通过 DTS 管理控制台实现同步对象变更、同步速度设置、延迟报警等同步链路原生功能,详细信息请参见 DTS 产品文档。 灾备实例拓扑图如下图所示。 灾备实例还有以下功能特点: 提供独立的数据库连接地址,由用户应用端自助控制连接。 使用主备高可用架构。 支持按小时计费,即开即用,即停即止。 提供独立的白名单配置,账号管理。 计费说明 RDS 灾备实例与主实例配置完全相同,且 RDS 通过数据传输实现主实例和异地灾备实例之间的实时同步。因此,创建灾备实例会同时产生 RDS 和 DTS 两种费用,价格详情请分别参见云数据库 RDS 详细价格信息和数据传输详细价格信息。 前提条件 当前灾备实例只支持数据库类型为 MySQL 的 RDS 实例。 要创建灾备实例,主实例要求 MySQL 5.6 及以上版本。在升级主实例版本前,请做好兼容性测试;或者新建一个 MySQL 5.6 的实例,将数据从主实例复制到新建实例,再在新建实例上创建灾备实例。 创建灾备实例的主实例必须要有内网地址。 功能限制 灾备实例有以下功能限制: 出于同步链路自身稳定性的需要,灾备实例仅支持创建只读权限的账号。 不支持备份设置、备份恢复、数据迁移、数据库管理、申请外网访问地址、修改连接地址功能。 操作步骤 登录 RDS 管理控制台,选择目标实例。 选择菜单中的 基本信息,单击 实例分布中的 添加灾备实例,如下图所示。 在 创建同步作业 页面单击 立即购买实例,购买灾备实例,如下图所示。 参数说明如下: 同步作业名称:同步作业任务名称,可以保持默认 实例 ID(本地实例信息):本地实例的 ID。系统自动关联当前实例 ID,您也可通过单击 其他阿里云账号下的RDS实例,填写 RDS 实例 ID、数据库账号和对应的 密码 实例 ID(目标实例信息):灾备实例的 ID。单击 立即购买实例 购买灾备实例 在 目标RDS实例购买 窗口选择实例所在地域,单击 立即购买,如下图所示。 购买灾备实例暂仅支持选择地域,其余设置信息默认与主实例一致。若有灾备实例升级需求,可在创建成功后在 RDS 管理控制台 对灾备实例进行变更配置。 说明 创建灾备实例需要数分钟时间,在此期间请勿关闭该窗口,否则灾备实例可能会创建失败。 灾备实例购买成功后,实例 ID 自动添加到目标实例 ID 中,单击 授权白名单并进入下一步,如下图所示。 系统自动创建迁移账号,创建完成后,单击 下一步,如下图所示。 说明 灾备实例上会自动生成名称为 dtssyncwriter 的账号供 DTS 同步使用,请勿对该账号进行任何修改或删除操作,否则将引起同步异常。 在 源库对象 中选择要迁移的对象,单击 >将要迁移的对象放入 已选择对象中,单击 下一步,如下图所示。 选择 同步初始化 类型并设置 同步速度,单击 预检查并启动,如下图所示。 参数说明如下: 同步初始化:将本地实例中同步对象的结构及数据迁移一份到灾备实例中,作为后续增量同步数据的基础。同步初始化有结构初始化和全量数据初始化可选,首次同步数据时,两者均需选择。 同步速度:设置主实例和灾备实例间的同步速率,保护主实例的正常业务,单位为 TPS。如果保持默认不填,则同步速度为数据传输服务的性能上限。 说明 以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 12。 系统显示预检查结果,如下图所示。 单击 检测结果 为失败的检测项后的 !,查看失败详细信息,根据失败详细信息完成错误排查。 错误排查完毕后,在 同步作业列表页面,单击当前同步任务后的 启动同步,如下图所示。 系统预检查通过后,单击 确定,自动启动同步任务,如下图所示。 在 DTS 数据同步列表页面可以查询创建的同步任务,并可以对同步任务进行修改同步对象、设置监控报警、修改同步速度等操作,详情请参见 DTS 产品文档。 说明 为保障灾备实例数据的实时性,请不要暂停同步灾备实例的同步任务。

2019-12-01 22:57:12 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 对于数据可靠性有强需求的业务场景或是有监管需求的金融业务场景,RDS 提供异地灾备实例,帮助用户提升数据可靠性。 背景介绍 RDS 通过数据传输服务(DTS)实现主实例和异地灾备实例之间的实时同步。主实例和灾备实例均搭建主备高可用架构,当主实例所在区域发生突发性自然灾害等状况,主节点(Master)和备节点(Slave)均无法连接时,可将异地灾备实例切换为主实例,在应用端修改数据库链接地址后,即可快速恢复应用的业务访问。 灾备实例可通过 DTS 管理控制台实现同步对象变更、同步速度设置、延迟报警等同步链路原生功能,详细信息请参见 DTS 产品文档。 灾备实例拓扑图如下图所示。 灾备实例还有以下功能特点: 提供独立的数据库连接地址,由用户应用端自助控制连接。 使用主备高可用架构。 支持按小时计费,即开即用,即停即止。 提供独立的白名单配置,账号管理。 计费说明 RDS 灾备实例与主实例配置完全相同,且 RDS 通过数据传输实现主实例和异地灾备实例之间的实时同步。因此,创建灾备实例会同时产生 RDS 和 DTS 两种费用,价格详情请分别参见云数据库 RDS 详细价格信息和数据传输详细价格信息。 前提条件 当前灾备实例只支持数据库类型为 MySQL 的 RDS 实例。 要创建灾备实例,主实例要求 MySQL 5.6 及以上版本。在升级主实例版本前,请做好兼容性测试;或者新建一个 MySQL 5.6 的实例,将数据从主实例复制到新建实例,再在新建实例上创建灾备实例。 创建灾备实例的主实例必须要有内网地址。 功能限制 灾备实例有以下功能限制: 出于同步链路自身稳定性的需要,灾备实例仅支持创建只读权限的账号。 不支持备份设置、备份恢复、数据迁移、数据库管理、申请外网访问地址、修改连接地址功能。 操作步骤 登录 RDS 管理控制台,选择目标实例。 选择菜单中的 基本信息,单击 实例分布中的 添加灾备实例,如下图所示。 在 创建同步作业 页面单击 立即购买实例,购买灾备实例,如下图所示。 参数说明如下: 同步作业名称:同步作业任务名称,可以保持默认 实例 ID(本地实例信息):本地实例的 ID。系统自动关联当前实例 ID,您也可通过单击 其他阿里云账号下的RDS实例,填写 RDS 实例 ID、数据库账号和对应的 密码 实例 ID(目标实例信息):灾备实例的 ID。单击 立即购买实例 购买灾备实例 在 目标RDS实例购买 窗口选择实例所在地域,单击 立即购买,如下图所示。 购买灾备实例暂仅支持选择地域,其余设置信息默认与主实例一致。若有灾备实例升级需求,可在创建成功后在 RDS 管理控制台 对灾备实例进行变更配置。 说明 创建灾备实例需要数分钟时间,在此期间请勿关闭该窗口,否则灾备实例可能会创建失败。 灾备实例购买成功后,实例 ID 自动添加到目标实例 ID 中,单击 授权白名单并进入下一步,如下图所示。 系统自动创建迁移账号,创建完成后,单击 下一步,如下图所示。 说明 灾备实例上会自动生成名称为 dtssyncwriter 的账号供 DTS 同步使用,请勿对该账号进行任何修改或删除操作,否则将引起同步异常。 在 源库对象 中选择要迁移的对象,单击 >将要迁移的对象放入 已选择对象中,单击 下一步,如下图所示。 选择 同步初始化 类型并设置 同步速度,单击 预检查并启动,如下图所示。 参数说明如下: 同步初始化:将本地实例中同步对象的结构及数据迁移一份到灾备实例中,作为后续增量同步数据的基础。同步初始化有结构初始化和全量数据初始化可选,首次同步数据时,两者均需选择。 同步速度:设置主实例和灾备实例间的同步速率,保护主实例的正常业务,单位为 TPS。如果保持默认不填,则同步速度为数据传输服务的性能上限。 说明 以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 12。 系统显示预检查结果,如下图所示。 单击 检测结果 为失败的检测项后的 !,查看失败详细信息,根据失败详细信息完成错误排查。 错误排查完毕后,在 同步作业列表页面,单击当前同步任务后的 启动同步,如下图所示。 系统预检查通过后,单击 确定,自动启动同步任务,如下图所示。 在 DTS 数据同步列表页面可以查询创建的同步任务,并可以对同步任务进行修改同步对象、设置监控报警、修改同步速度等操作,详情请参见 DTS 产品文档。 说明 为保障灾备实例数据的实时性,请不要暂停同步灾备实例的同步任务。

2019-12-01 22:57:11 0 浏览量 回答数 0

Quick BI 数据可视化分析平台

2020年入选全球Gartner ABI魔力象限,为中国首个且唯一入选BI产品

回答

详细解答可以参考官方帮助文档 对于数据可靠性有强需求的业务场景或是有监管需求的金融业务场景,RDS 提供异地灾备实例,帮助用户提升数据可靠性。 背景介绍 RDS 通过数据传输服务(DTS)实现主实例和异地灾备实例之间的实时同步。主实例和灾备实例均搭建主备高可用架构,当主实例所在区域发生突发性自然灾害等状况,主节点(Master)和备节点(Slave)均无法连接时,可将异地灾备实例切换为主实例,在应用端修改数据库链接地址后,即可快速恢复应用的业务访问。 灾备实例可通过 DTS 管理控制台实现同步对象变更、同步速度设置、延迟报警等同步链路原生功能,详细信息请参见 DTS 产品文档。 灾备实例拓扑图如下图所示。 灾备实例还有以下功能特点: 提供独立的数据库连接地址,由用户应用端自助控制连接。 使用主备高可用架构。 支持按小时计费,即开即用,即停即止。 提供独立的白名单配置,账号管理。 计费说明 RDS 灾备实例与主实例配置完全相同,且 RDS 通过数据传输实现主实例和异地灾备实例之间的实时同步。因此,创建灾备实例会同时产生 RDS 和 DTS 两种费用,价格详情请分别参见云数据库 RDS 详细价格信息和数据传输详细价格信息。 前提条件 当前灾备实例只支持数据库类型为 MySQL 的 RDS 实例。 要创建灾备实例,主实例要求 MySQL 5.6 及以上版本。在升级主实例版本前,请做好兼容性测试;或者新建一个 MySQL 5.6 的实例,将数据从主实例复制到新建实例,再在新建实例上创建灾备实例。 创建灾备实例的主实例必须要有内网地址。 功能限制 灾备实例有以下功能限制: 出于同步链路自身稳定性的需要,灾备实例仅支持创建只读权限的账号。 不支持备份设置、备份恢复、数据迁移、数据库管理、申请外网访问地址、修改连接地址功能。 操作步骤 登录 RDS 管理控制台,选择目标实例。 选择菜单中的 基本信息,单击 实例分布中的 添加灾备实例,如下图所示。 在 创建同步作业 页面单击 立即购买实例,购买灾备实例,如下图所示。 参数说明如下: 同步作业名称:同步作业任务名称,可以保持默认 实例 ID(本地实例信息):本地实例的 ID。系统自动关联当前实例 ID,您也可通过单击 其他阿里云账号下的RDS实例,填写 RDS 实例 ID、数据库账号和对应的 密码 实例 ID(目标实例信息):灾备实例的 ID。单击 立即购买实例 购买灾备实例 在 目标RDS实例购买 窗口选择实例所在地域,单击 立即购买,如下图所示。 购买灾备实例暂仅支持选择地域,其余设置信息默认与主实例一致。若有灾备实例升级需求,可在创建成功后在 RDS 管理控制台 对灾备实例进行变更配置。 说明 创建灾备实例需要数分钟时间,在此期间请勿关闭该窗口,否则灾备实例可能会创建失败。 灾备实例购买成功后,实例 ID 自动添加到目标实例 ID 中,单击 授权白名单并进入下一步,如下图所示。 系统自动创建迁移账号,创建完成后,单击 下一步,如下图所示。 说明 灾备实例上会自动生成名称为 dtssyncwriter 的账号供 DTS 同步使用,请勿对该账号进行任何修改或删除操作,否则将引起同步异常。 在 源库对象 中选择要迁移的对象,单击 >将要迁移的对象放入 已选择对象中,单击 下一步,如下图所示。 选择 同步初始化 类型并设置 同步速度,单击 预检查并启动,如下图所示。 参数说明如下: 同步初始化:将本地实例中同步对象的结构及数据迁移一份到灾备实例中,作为后续增量同步数据的基础。同步初始化有结构初始化和全量数据初始化可选,首次同步数据时,两者均需选择。 同步速度:设置主实例和灾备实例间的同步速率,保护主实例的正常业务,单位为 TPS。如果保持默认不填,则同步速度为数据传输服务的性能上限。 说明 以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 12。 系统显示预检查结果,如下图所示。 单击 检测结果 为失败的检测项后的 !,查看失败详细信息,根据失败详细信息完成错误排查。 错误排查完毕后,在 同步作业列表页面,单击当前同步任务后的 启动同步,如下图所示。 系统预检查通过后,单击 确定,自动启动同步任务,如下图所示。 在 DTS 数据同步列表页面可以查询创建的同步任务,并可以对同步任务进行修改同步对象、设置监控报警、修改同步速度等操作,详情请参见 DTS 产品文档。 说明 为保障灾备实例数据的实时性,请不要暂停同步灾备实例的同步任务。

2019-12-01 22:57:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 对于数据可靠性有强需求的业务场景或是有监管需求的金融业务场景,RDS 提供异地灾备实例,帮助用户提升数据可靠性。 背景介绍 RDS 通过数据传输服务(DTS)实现主实例和异地灾备实例之间的实时同步。主实例和灾备实例均搭建主备高可用架构,当主实例所在区域发生突发性自然灾害等状况,主节点(Master)和备节点(Slave)均无法连接时,可将异地灾备实例切换为主实例,在应用端修改数据库链接地址后,即可快速恢复应用的业务访问。 灾备实例可通过 DTS 管理控制台实现同步对象变更、同步速度设置、延迟报警等同步链路原生功能,详细信息请参见 DTS 产品文档。 灾备实例拓扑图如下图所示。 灾备实例还有以下功能特点: 提供独立的数据库连接地址,由用户应用端自助控制连接。 使用主备高可用架构。 支持按小时计费,即开即用,即停即止。 提供独立的白名单配置,账号管理。 计费说明 RDS 灾备实例与主实例配置完全相同,且 RDS 通过数据传输实现主实例和异地灾备实例之间的实时同步。因此,创建灾备实例会同时产生 RDS 和 DTS 两种费用,价格详情请分别参见云数据库 RDS 详细价格信息和数据传输详细价格信息。 前提条件 当前灾备实例只支持数据库类型为 MySQL 的 RDS 实例。 要创建灾备实例,主实例要求 MySQL 5.6 及以上版本。在升级主实例版本前,请做好兼容性测试;或者新建一个 MySQL 5.6 的实例,将数据从主实例复制到新建实例,再在新建实例上创建灾备实例。 创建灾备实例的主实例必须要有内网地址。 功能限制 灾备实例有以下功能限制: 出于同步链路自身稳定性的需要,灾备实例仅支持创建只读权限的账号。 不支持备份设置、备份恢复、数据迁移、数据库管理、申请外网访问地址、修改连接地址功能。 操作步骤 登录 RDS 管理控制台,选择目标实例。 选择菜单中的 基本信息,单击 实例分布中的 添加灾备实例,如下图所示。 在 创建同步作业 页面单击 立即购买实例,购买灾备实例,如下图所示。 参数说明如下: 同步作业名称:同步作业任务名称,可以保持默认 实例 ID(本地实例信息):本地实例的 ID。系统自动关联当前实例 ID,您也可通过单击 其他阿里云账号下的RDS实例,填写 RDS 实例 ID、数据库账号和对应的 密码 实例 ID(目标实例信息):灾备实例的 ID。单击 立即购买实例 购买灾备实例 在 目标RDS实例购买 窗口选择实例所在地域,单击 立即购买,如下图所示。 购买灾备实例暂仅支持选择地域,其余设置信息默认与主实例一致。若有灾备实例升级需求,可在创建成功后在 RDS 管理控制台 对灾备实例进行变更配置。 说明 创建灾备实例需要数分钟时间,在此期间请勿关闭该窗口,否则灾备实例可能会创建失败。 灾备实例购买成功后,实例 ID 自动添加到目标实例 ID 中,单击 授权白名单并进入下一步,如下图所示。 系统自动创建迁移账号,创建完成后,单击 下一步,如下图所示。 说明 灾备实例上会自动生成名称为 dtssyncwriter 的账号供 DTS 同步使用,请勿对该账号进行任何修改或删除操作,否则将引起同步异常。 在 源库对象 中选择要迁移的对象,单击 >将要迁移的对象放入 已选择对象中,单击 下一步,如下图所示。 选择 同步初始化 类型并设置 同步速度,单击 预检查并启动,如下图所示。 参数说明如下: 同步初始化:将本地实例中同步对象的结构及数据迁移一份到灾备实例中,作为后续增量同步数据的基础。同步初始化有结构初始化和全量数据初始化可选,首次同步数据时,两者均需选择。 同步速度:设置主实例和灾备实例间的同步速率,保护主实例的正常业务,单位为 TPS。如果保持默认不填,则同步速度为数据传输服务的性能上限。 说明 以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 12。 系统显示预检查结果,如下图所示。 单击 检测结果 为失败的检测项后的 !,查看失败详细信息,根据失败详细信息完成错误排查。 错误排查完毕后,在 同步作业列表页面,单击当前同步任务后的 启动同步,如下图所示。 系统预检查通过后,单击 确定,自动启动同步任务,如下图所示。 在 DTS 数据同步列表页面可以查询创建的同步任务,并可以对同步任务进行修改同步对象、设置监控报警、修改同步速度等操作,详情请参见 DTS 产品文档。 说明 为保障灾备实例数据的实时性,请不要暂停同步灾备实例的同步任务。

2019-12-01 22:57:12 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 对于数据可靠性有强需求的业务场景或是有监管需求的金融业务场景,RDS 提供异地灾备实例,帮助用户提升数据可靠性。 背景介绍 RDS 通过数据传输服务(DTS)实现主实例和异地灾备实例之间的实时同步。主实例和灾备实例均搭建主备高可用架构,当主实例所在区域发生突发性自然灾害等状况,主节点(Master)和备节点(Slave)均无法连接时,可将异地灾备实例切换为主实例,在应用端修改数据库链接地址后,即可快速恢复应用的业务访问。 灾备实例可通过 DTS 管理控制台实现同步对象变更、同步速度设置、延迟报警等同步链路原生功能,详细信息请参见 DTS 产品文档。 灾备实例拓扑图如下图所示。 灾备实例还有以下功能特点: 提供独立的数据库连接地址,由用户应用端自助控制连接。 使用主备高可用架构。 支持按小时计费,即开即用,即停即止。 提供独立的白名单配置,账号管理。 计费说明 RDS 灾备实例与主实例配置完全相同,且 RDS 通过数据传输实现主实例和异地灾备实例之间的实时同步。因此,创建灾备实例会同时产生 RDS 和 DTS 两种费用,价格详情请分别参见云数据库 RDS 详细价格信息和数据传输详细价格信息。 前提条件 当前灾备实例只支持数据库类型为 MySQL 的 RDS 实例。 要创建灾备实例,主实例要求 MySQL 5.6 及以上版本。在升级主实例版本前,请做好兼容性测试;或者新建一个 MySQL 5.6 的实例,将数据从主实例复制到新建实例,再在新建实例上创建灾备实例。 创建灾备实例的主实例必须要有内网地址。 功能限制 灾备实例有以下功能限制: 出于同步链路自身稳定性的需要,灾备实例仅支持创建只读权限的账号。 不支持备份设置、备份恢复、数据迁移、数据库管理、申请外网访问地址、修改连接地址功能。 操作步骤 登录 RDS 管理控制台,选择目标实例。 选择菜单中的 基本信息,单击 实例分布中的 添加灾备实例,如下图所示。 在 创建同步作业 页面单击 立即购买实例,购买灾备实例,如下图所示。 参数说明如下: 同步作业名称:同步作业任务名称,可以保持默认 实例 ID(本地实例信息):本地实例的 ID。系统自动关联当前实例 ID,您也可通过单击 其他阿里云账号下的RDS实例,填写 RDS 实例 ID、数据库账号和对应的 密码 实例 ID(目标实例信息):灾备实例的 ID。单击 立即购买实例 购买灾备实例 在 目标RDS实例购买 窗口选择实例所在地域,单击 立即购买,如下图所示。 购买灾备实例暂仅支持选择地域,其余设置信息默认与主实例一致。若有灾备实例升级需求,可在创建成功后在 RDS 管理控制台 对灾备实例进行变更配置。 说明 创建灾备实例需要数分钟时间,在此期间请勿关闭该窗口,否则灾备实例可能会创建失败。 灾备实例购买成功后,实例 ID 自动添加到目标实例 ID 中,单击 授权白名单并进入下一步,如下图所示。 系统自动创建迁移账号,创建完成后,单击 下一步,如下图所示。 说明 灾备实例上会自动生成名称为 dtssyncwriter 的账号供 DTS 同步使用,请勿对该账号进行任何修改或删除操作,否则将引起同步异常。 在 源库对象 中选择要迁移的对象,单击 >将要迁移的对象放入 已选择对象中,单击 下一步,如下图所示。 选择 同步初始化 类型并设置 同步速度,单击 预检查并启动,如下图所示。 参数说明如下: 同步初始化:将本地实例中同步对象的结构及数据迁移一份到灾备实例中,作为后续增量同步数据的基础。同步初始化有结构初始化和全量数据初始化可选,首次同步数据时,两者均需选择。 同步速度:设置主实例和灾备实例间的同步速率,保护主实例的正常业务,单位为 TPS。如果保持默认不填,则同步速度为数据传输服务的性能上限。 说明 以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 12。 系统显示预检查结果,如下图所示。 单击 检测结果 为失败的检测项后的 !,查看失败详细信息,根据失败详细信息完成错误排查。 错误排查完毕后,在 同步作业列表页面,单击当前同步任务后的 启动同步,如下图所示。 系统预检查通过后,单击 确定,自动启动同步任务,如下图所示。 在 DTS 数据同步列表页面可以查询创建的同步任务,并可以对同步任务进行修改同步对象、设置监控报警、修改同步速度等操作,详情请参见 DTS 产品文档。 说明 为保障灾备实例数据的实时性,请不要暂停同步灾备实例的同步任务。

2019-12-01 22:57:12 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 对于数据可靠性有强需求的业务场景或是有监管需求的金融业务场景,RDS 提供异地灾备实例,帮助用户提升数据可靠性。 背景介绍 RDS 通过数据传输服务(DTS)实现主实例和异地灾备实例之间的实时同步。主实例和灾备实例均搭建主备高可用架构,当主实例所在区域发生突发性自然灾害等状况,主节点(Master)和备节点(Slave)均无法连接时,可将异地灾备实例切换为主实例,在应用端修改数据库链接地址后,即可快速恢复应用的业务访问。 灾备实例可通过 DTS 管理控制台实现同步对象变更、同步速度设置、延迟报警等同步链路原生功能,详细信息请参见 DTS 产品文档。 灾备实例拓扑图如下图所示。 灾备实例还有以下功能特点: 提供独立的数据库连接地址,由用户应用端自助控制连接。 使用主备高可用架构。 支持按小时计费,即开即用,即停即止。 提供独立的白名单配置,账号管理。 计费说明 RDS 灾备实例与主实例配置完全相同,且 RDS 通过数据传输实现主实例和异地灾备实例之间的实时同步。因此,创建灾备实例会同时产生 RDS 和 DTS 两种费用,价格详情请分别参见云数据库 RDS 详细价格信息和数据传输详细价格信息。 前提条件 当前灾备实例只支持数据库类型为 MySQL 的 RDS 实例。 要创建灾备实例,主实例要求 MySQL 5.6 及以上版本。在升级主实例版本前,请做好兼容性测试;或者新建一个 MySQL 5.6 的实例,将数据从主实例复制到新建实例,再在新建实例上创建灾备实例。 创建灾备实例的主实例必须要有内网地址。 功能限制 灾备实例有以下功能限制: 出于同步链路自身稳定性的需要,灾备实例仅支持创建只读权限的账号。 不支持备份设置、备份恢复、数据迁移、数据库管理、申请外网访问地址、修改连接地址功能。 操作步骤 登录 RDS 管理控制台,选择目标实例。 选择菜单中的 基本信息,单击 实例分布中的 添加灾备实例,如下图所示。 在 创建同步作业 页面单击 立即购买实例,购买灾备实例,如下图所示。 参数说明如下: 同步作业名称:同步作业任务名称,可以保持默认 实例 ID(本地实例信息):本地实例的 ID。系统自动关联当前实例 ID,您也可通过单击 其他阿里云账号下的RDS实例,填写 RDS 实例 ID、数据库账号和对应的 密码 实例 ID(目标实例信息):灾备实例的 ID。单击 立即购买实例 购买灾备实例 在 目标RDS实例购买 窗口选择实例所在地域,单击 立即购买,如下图所示。 购买灾备实例暂仅支持选择地域,其余设置信息默认与主实例一致。若有灾备实例升级需求,可在创建成功后在 RDS 管理控制台 对灾备实例进行变更配置。 说明 创建灾备实例需要数分钟时间,在此期间请勿关闭该窗口,否则灾备实例可能会创建失败。 灾备实例购买成功后,实例 ID 自动添加到目标实例 ID 中,单击 授权白名单并进入下一步,如下图所示。 系统自动创建迁移账号,创建完成后,单击 下一步,如下图所示。 说明 灾备实例上会自动生成名称为 dtssyncwriter 的账号供 DTS 同步使用,请勿对该账号进行任何修改或删除操作,否则将引起同步异常。 在 源库对象 中选择要迁移的对象,单击 >将要迁移的对象放入 已选择对象中,单击 下一步,如下图所示。 选择 同步初始化 类型并设置 同步速度,单击 预检查并启动,如下图所示。 参数说明如下: 同步初始化:将本地实例中同步对象的结构及数据迁移一份到灾备实例中,作为后续增量同步数据的基础。同步初始化有结构初始化和全量数据初始化可选,首次同步数据时,两者均需选择。 同步速度:设置主实例和灾备实例间的同步速率,保护主实例的正常业务,单位为 TPS。如果保持默认不填,则同步速度为数据传输服务的性能上限。 说明 以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 12。 系统显示预检查结果,如下图所示。 单击 检测结果 为失败的检测项后的 !,查看失败详细信息,根据失败详细信息完成错误排查。 错误排查完毕后,在 同步作业列表页面,单击当前同步任务后的 启动同步,如下图所示。 系统预检查通过后,单击 确定,自动启动同步任务,如下图所示。 在 DTS 数据同步列表页面可以查询创建的同步任务,并可以对同步任务进行修改同步对象、设置监控报警、修改同步速度等操作,详情请参见 DTS 产品文档。 说明 为保障灾备实例数据的实时性,请不要暂停同步灾备实例的同步任务。

2019-12-01 22:57:12 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 对于数据可靠性有强需求的业务场景或是有监管需求的金融业务场景,RDS 提供异地灾备实例,帮助用户提升数据可靠性。 背景介绍 RDS 通过数据传输服务(DTS)实现主实例和异地灾备实例之间的实时同步。主实例和灾备实例均搭建主备高可用架构,当主实例所在区域发生突发性自然灾害等状况,主节点(Master)和备节点(Slave)均无法连接时,可将异地灾备实例切换为主实例,在应用端修改数据库链接地址后,即可快速恢复应用的业务访问。 灾备实例可通过 DTS 管理控制台实现同步对象变更、同步速度设置、延迟报警等同步链路原生功能,详细信息请参见 DTS 产品文档。 灾备实例拓扑图如下图所示。 灾备实例还有以下功能特点: 提供独立的数据库连接地址,由用户应用端自助控制连接。 使用主备高可用架构。 支持按小时计费,即开即用,即停即止。 提供独立的白名单配置,账号管理。 计费说明 RDS 灾备实例与主实例配置完全相同,且 RDS 通过数据传输实现主实例和异地灾备实例之间的实时同步。因此,创建灾备实例会同时产生 RDS 和 DTS 两种费用,价格详情请分别参见云数据库 RDS 详细价格信息和数据传输详细价格信息。 前提条件 当前灾备实例只支持数据库类型为 MySQL 的 RDS 实例。 要创建灾备实例,主实例要求 MySQL 5.6 及以上版本。在升级主实例版本前,请做好兼容性测试;或者新建一个 MySQL 5.6 的实例,将数据从主实例复制到新建实例,再在新建实例上创建灾备实例。 创建灾备实例的主实例必须要有内网地址。 功能限制 灾备实例有以下功能限制: 出于同步链路自身稳定性的需要,灾备实例仅支持创建只读权限的账号。 不支持备份设置、备份恢复、数据迁移、数据库管理、申请外网访问地址、修改连接地址功能。 操作步骤 登录 RDS 管理控制台,选择目标实例。 选择菜单中的 基本信息,单击 实例分布中的 添加灾备实例,如下图所示。 在 创建同步作业 页面单击 立即购买实例,购买灾备实例,如下图所示。 参数说明如下: 同步作业名称:同步作业任务名称,可以保持默认 实例 ID(本地实例信息):本地实例的 ID。系统自动关联当前实例 ID,您也可通过单击 其他阿里云账号下的RDS实例,填写 RDS 实例 ID、数据库账号和对应的 密码 实例 ID(目标实例信息):灾备实例的 ID。单击 立即购买实例 购买灾备实例 在 目标RDS实例购买 窗口选择实例所在地域,单击 立即购买,如下图所示。 购买灾备实例暂仅支持选择地域,其余设置信息默认与主实例一致。若有灾备实例升级需求,可在创建成功后在 RDS 管理控制台 对灾备实例进行变更配置。 说明 创建灾备实例需要数分钟时间,在此期间请勿关闭该窗口,否则灾备实例可能会创建失败。 灾备实例购买成功后,实例 ID 自动添加到目标实例 ID 中,单击 授权白名单并进入下一步,如下图所示。 系统自动创建迁移账号,创建完成后,单击 下一步,如下图所示。 说明 灾备实例上会自动生成名称为 dtssyncwriter 的账号供 DTS 同步使用,请勿对该账号进行任何修改或删除操作,否则将引起同步异常。 在 源库对象 中选择要迁移的对象,单击 >将要迁移的对象放入 已选择对象中,单击 下一步,如下图所示。 选择 同步初始化 类型并设置 同步速度,单击 预检查并启动,如下图所示。 参数说明如下: 同步初始化:将本地实例中同步对象的结构及数据迁移一份到灾备实例中,作为后续增量同步数据的基础。同步初始化有结构初始化和全量数据初始化可选,首次同步数据时,两者均需选择。 同步速度:设置主实例和灾备实例间的同步速率,保护主实例的正常业务,单位为 TPS。如果保持默认不填,则同步速度为数据传输服务的性能上限。 说明 以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 12。 系统显示预检查结果,如下图所示。 单击 检测结果 为失败的检测项后的 !,查看失败详细信息,根据失败详细信息完成错误排查。 错误排查完毕后,在 同步作业列表页面,单击当前同步任务后的 启动同步,如下图所示。 系统预检查通过后,单击 确定,自动启动同步任务,如下图所示。 在 DTS 数据同步列表页面可以查询创建的同步任务,并可以对同步任务进行修改同步对象、设置监控报警、修改同步速度等操作,详情请参见 DTS 产品文档。 说明 为保障灾备实例数据的实时性,请不要暂停同步灾备实例的同步任务。

2019-12-01 22:57:12 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 对于数据可靠性有强需求的业务场景或是有监管需求的金融业务场景,RDS 提供异地灾备实例,帮助用户提升数据可靠性。 背景介绍 RDS 通过数据传输服务(DTS)实现主实例和异地灾备实例之间的实时同步。主实例和灾备实例均搭建主备高可用架构,当主实例所在区域发生突发性自然灾害等状况,主节点(Master)和备节点(Slave)均无法连接时,可将异地灾备实例切换为主实例,在应用端修改数据库链接地址后,即可快速恢复应用的业务访问。 灾备实例可通过 DTS 管理控制台实现同步对象变更、同步速度设置、延迟报警等同步链路原生功能,详细信息请参见 DTS 产品文档。 灾备实例拓扑图如下图所示。 灾备实例还有以下功能特点: 提供独立的数据库连接地址,由用户应用端自助控制连接。 使用主备高可用架构。 支持按小时计费,即开即用,即停即止。 提供独立的白名单配置,账号管理。 计费说明 RDS 灾备实例与主实例配置完全相同,且 RDS 通过数据传输实现主实例和异地灾备实例之间的实时同步。因此,创建灾备实例会同时产生 RDS 和 DTS 两种费用,价格详情请分别参见云数据库 RDS 详细价格信息和数据传输详细价格信息。 前提条件 当前灾备实例只支持数据库类型为 MySQL 的 RDS 实例。 要创建灾备实例,主实例要求 MySQL 5.6 及以上版本。在升级主实例版本前,请做好兼容性测试;或者新建一个 MySQL 5.6 的实例,将数据从主实例复制到新建实例,再在新建实例上创建灾备实例。 创建灾备实例的主实例必须要有内网地址。 功能限制 灾备实例有以下功能限制: 出于同步链路自身稳定性的需要,灾备实例仅支持创建只读权限的账号。 不支持备份设置、备份恢复、数据迁移、数据库管理、申请外网访问地址、修改连接地址功能。 操作步骤 登录 RDS 管理控制台,选择目标实例。 选择菜单中的 基本信息,单击 实例分布中的 添加灾备实例,如下图所示。 在 创建同步作业 页面单击 立即购买实例,购买灾备实例,如下图所示。 参数说明如下: 同步作业名称:同步作业任务名称,可以保持默认 实例 ID(本地实例信息):本地实例的 ID。系统自动关联当前实例 ID,您也可通过单击 其他阿里云账号下的RDS实例,填写 RDS 实例 ID、数据库账号和对应的 密码 实例 ID(目标实例信息):灾备实例的 ID。单击 立即购买实例 购买灾备实例 在 目标RDS实例购买 窗口选择实例所在地域,单击 立即购买,如下图所示。 购买灾备实例暂仅支持选择地域,其余设置信息默认与主实例一致。若有灾备实例升级需求,可在创建成功后在 RDS 管理控制台 对灾备实例进行变更配置。 说明 创建灾备实例需要数分钟时间,在此期间请勿关闭该窗口,否则灾备实例可能会创建失败。 灾备实例购买成功后,实例 ID 自动添加到目标实例 ID 中,单击 授权白名单并进入下一步,如下图所示。 系统自动创建迁移账号,创建完成后,单击 下一步,如下图所示。 说明 灾备实例上会自动生成名称为 dtssyncwriter 的账号供 DTS 同步使用,请勿对该账号进行任何修改或删除操作,否则将引起同步异常。 在 源库对象 中选择要迁移的对象,单击 >将要迁移的对象放入 已选择对象中,单击 下一步,如下图所示。 选择 同步初始化 类型并设置 同步速度,单击 预检查并启动,如下图所示。 参数说明如下: 同步初始化:将本地实例中同步对象的结构及数据迁移一份到灾备实例中,作为后续增量同步数据的基础。同步初始化有结构初始化和全量数据初始化可选,首次同步数据时,两者均需选择。 同步速度:设置主实例和灾备实例间的同步速率,保护主实例的正常业务,单位为 TPS。如果保持默认不填,则同步速度为数据传输服务的性能上限。 说明 以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 12。 系统显示预检查结果,如下图所示。 单击 检测结果 为失败的检测项后的 !,查看失败详细信息,根据失败详细信息完成错误排查。 错误排查完毕后,在 同步作业列表页面,单击当前同步任务后的 启动同步,如下图所示。 系统预检查通过后,单击 确定,自动启动同步任务,如下图所示。 在 DTS 数据同步列表页面可以查询创建的同步任务,并可以对同步任务进行修改同步对象、设置监控报警、修改同步速度等操作,详情请参见 DTS 产品文档。 说明 为保障灾备实例数据的实时性,请不要暂停同步灾备实例的同步任务。

2019-12-01 22:57:11 0 浏览量 回答数 0

回答

高可用架构部署方案 高可用架构提供业务分发、弹性扩展、多可用区部署等功能。相较于使用单台ECS实例部署数据库与应用,高可用架构只需简单部署,并且拥有更高的稳定性和可扩展性。 高可用架构特点 高可用架构具有如下特点: 使用多可用区高可用版的负载均衡SLB(Server Load Balancer)对多台云服务器ECS进行流量分发,可扩展应用系统对外服务能力、消除单点故障,提升应用系统的可用性。使用SLB自动跨可用区部署,可加强业务容灾能力。 通过自定义镜像,可以迅速复制出相同应用部署的云服务器ECS实例,之后将实例添加到SLB后端服务器组中,实现业务高可用。SLB可以同时配置四层和七层监听,及轮循、加权轮循、加权最小连接数等多种算法,合理分配后端ECS计算资源。 使用云数据库RDS(Relational Database Service),针对高并发场景进行特殊优化,同时引入线程池、并行复制、隐含主键等功能保证系统持续稳定和高吞吐。云数据库CloudDBA具有完备的性能监控数据,实时监控实例硬件使用指标、慢SQL,并给出各种优化建议,帮您快速定位并解决问题。 部署流程 假设您已拥有一台ECS实例,并且在该实例上部署了数据库与应用,您可以将单实例部署方式转变为单可用区或多可用区高可用架构。本教程指导您如何使用ECS、EIP、SLB和RDS产品来部署多可用区高可用架构。 高可用结构图 使用自定义镜像,部署多台相同配置的ECS实例。详情请参见复制ECS实例。 创建负载均衡SLB实例,将实例添加到SLB后端服务器组中,用于跨可用区挂载ECS实例,实现业务的高可用性。详情请参见配置SLB实例。 使用DTS将ECS实例上的自建数据库迁移至RDS实例,保障业务数据库不中断,自动备份保障数据不丢失。详情请参见迁移自建数据库至RDS实例。 复制ECS实例为了支持跨可用区容灾部署,本教程使用源实例的自定义镜像复制出三台ECS实例。一台与源实例位于同一可用区,两台与源实例位于同一地域下的不同可用区。 前提条件 已注册阿里云账号。如还未注册,请先完成账号注册。 已拥有待复制的源ECS实例。 操作步骤 为ECS实例创建自定义镜像。 登录ECS管理控制台。 在左侧导航栏,单击实例与镜像 > 实例。 在顶部状态栏处,选择地域。 找到目标实例。在操作列中,单击更多 > 磁盘和镜像 > 创建自定义镜像。 输入镜像名称和描述信息。 单击创建。 说明 创建镜像需要一段时间,请您耐心等待。 在左侧导航栏,单击实例与镜像 > 镜像。当目标镜像的进度为100%、状态为可用时,表示镜像创建成功。自定义镜像 使用自定义镜像创建3台ECS实例。 在左侧导航栏,单击实例与镜像 > 镜像。 在自定义镜像页面,找到上一步创建的自定义镜像,在操作列,单击创建实例。 在自定义购买页面,镜像区域已设置为您选择的自定义镜像。根据页面提示,完成其他配置项并购买1台ECS实例。 其中: 地域:选择与源实例相同的地域。 可用区:选择与源实例相同的可用区。 公网带宽:取消勾选分配公网IPv4地址。 更多配置详情,请参见使用向导创建实例。 重复第i步和第ii步。在自定义购买页,镜像区域已设置为您选择的自定义镜像。根据页面提示,完成其他配置项并购买2台实例。 其中: 地域:选择与源实例相同的地域。 可用区:选择与源实例不同的可用区。 实例区域:设置购买实例数量为2。 公网带宽区域:取消勾选分配公网IPv4地址。 更多配置详情,请参见使用向导创建实例。 执行结果 在左侧导航栏,单击实例与镜像 > 实例。在实例列表页面,四台ECS实例的状态均为运行中,可用区两两相同。 ecs_instances 配置SLB实例 ECS实例复制完成后,在支持多可用区的地域创建负载均衡SLB实例,用于跨可用区挂载ECS实例,扩展应用系统对外服务能力、消除单点故障,提升应用系统的可用性。本文介绍SLB实例的部署方法。 前提条件 已复制三台ECS实例,详情请参见复制ECS实例。 四台ECS实例的Web服务均已启动并正常运行。 注意 若Web服务未运行,则SLB实例与ECS实例之间无法正常通信。 操作步骤 创建SLB实例。具体操作,请参见创建负载均衡实例。 本教程使用的配置如下: 地域:必须与ECS实例位于同一地域。 可用区类型:选择多可用区。 实例类型:选择私网。 网络类型:选择专有网络。 主可用区和备可用区:按需配置。 create_slb 将源实例的公网IP转换为弹性公网IP。具体操作,请参见专有网络公网IP转换为弹性公网IP。 说明 为避免影响业务,需保证源实例IP地址不变。因此,需要先将源实例的公网IP转换为弹性公网IP,与源实例解绑后,再将其绑定至高可用版SLB实例上。 ip_eip 解绑源实例与弹性公网IP。 在源实例的IP地址列,单击弹性IP地址链接。 click_eip 在弹性公网IP页面,单击解绑。 unbindEIP 单击确定。更多详情,请参见解绑EIP。 绑定弹性公网IP至SLB实例。 在弹性公网IP页面,找到与源实例解绑后的弹性公网IP。 bindEIP 在操作列,单击绑定。 实例类型选择SLB实例,SLB实例选择刚创建的SLB实例,单击确定。更多详情,请参见绑定SLB实例。 配置SLB实例。具体操作,请参见配置负载均衡实例。 基本配置如下: 在协议&监听页签,完成以下配置。 负载均衡协议:选择TCP。 监听端口:输入80。 调度算法:按需选择。本教程选择轮询。 其他配置使用默认值。 configure_slb 单击下一步。在后端服务器页签,选择默认服务器组,单击继续添加添加ECS实例。 addEcsInstance 勾选源实例和已复制的三台ECS实例,单击下一步:配置权重和端口号。端口配置为80,其他值保持默认,单击下一步。 configure_ports 在健康检查页签,使用默认值,单击下一步。 在配置审核页签,核对信息后,单击提交。 单击确定,返回实例管理页面,单击refresh。 当健康检查状态为正常时,表示后端ECS实例可以正常处理负载均衡转发的请求了。 说明 健康检查需要几分钟时间,请您耐心等待并单击刷新图标查看状态。 health_check 执行结果 为方便测试,本教程分别在四台ECS实例上搭建了静态网页,以标识每台ECS实例。在浏览器中输入负载均衡实例的服务地址,测试负载均衡服务。由于调度算法为轮询,请求会轮流发往每台ECS实例。 slb_test 迁移自建数据库至RDS实例 将源ECS实例上的数据库迁移至高可用版云数据库RDS,可实现数据库服务的高可用性、高可靠性、高安全性和高易用性。本教程以MySQL数据库为例,介绍如何使用DTS将ECS实例上的自建数据库迁移至RDS实例。 前提条件 已配置SLB实例,详情请参见配置SLB实例。 已创建高可用版RDS实例。如未创建,请参见创建RDS for MySQL实例。 已为RDS实例创建账号。如未创建,请参见创建账号和数据库。 已为ECS实例上的自建数据库创建非root账号,用于DTS迁移。 例如,您可以运行以下命令为MySQL数据库创建名为dts、密码为123456的账号。 grant all on . to 'dts'@'%' IDENTIFIED BY '123456'; 背景信息 DTS提供的数据迁移功能能够支持同异构数据源之间的数据迁移,同时提供了库表列三级映射、数据过滤多种ETL特性。您可以使用DTS进行零停机迁移,在迁移过程中,源数据库正常持续提供服务,最大程度降低迁移对业务的影响。DTS支持的数据库类型请参见数据迁移。 操作步骤 登录数据传输DTS控制台。 在左侧导航栏,选择数据迁移。 选择目标RDS实例所在地域,并单击创建迁移任务。 配置迁移任务。 配置任务名称。 您可以使用默认的名称或者自定义名称。 配置源库信息。 DTS支持通过公网、VPN网关、专线及智能网关访问的自建数据库。本教程使用的源数据库为ECS实例上的自建数据库。其他类型数据库的迁移方案,请参见DTS用户手册。 参数名称 描述 实例类型 ECS上的自建数据库。 实例地区 源ECS实例所在地域。 ECS实例ID 源ECS实例的实例ID。DTS支持经典网络及专有网络的ECS实例。 数据库类型 源ECS实例上自建数据库的类型。本示例中,数据库类型为MySQL。 端口 MySQL数据库监听的端口号。 数据库账号 源ECS实例上MySQL数据库的非root账号。 说明 数据库账号必须填写非root账号,否则测试连接时会报错。 数据库密码 非root账号对应的密码。 单击源库信息右下角的测试连接。 当返回的结果为测试通过时,表示源库连接正常。 配置目标库信息。 参数名称 参数值 实例类型 RDS实例。 实例地区 RDS实例所在地域。 RDS实例ID RDS实例的实例ID。 数据库账号 RDS实例的账号。 为RDS实例创建账号,请参见创建账号和数据库。 说明 数据库账号必须填写非root账号,否则测试连接时会报错。 数据库密码 账号对应的密码。 单击目标库信息右下角的测试连接。 当返回的结果为测试通过时,表示目标库连接正常。 单击授权白名单并进入下一步。 配置迁移类型及迁移对象。 配置迁移类型。 业务零停机迁移,请选择:结构迁移+全量数据迁移+增量数据迁移。 全量迁移,请选择:结构迁移+全量数据迁移。 配置迁移对象。 在迁移对象框中单击要迁移的数据库对象,如数据库、表或列,然后单击>添加到已选择对象框中。 说明 默认情况下,数据库对象迁移到ECS自建MySQL实例后,对象名跟本地MySQL实例一致。如果迁移的数据库对象在源实例跟目标实例上名称不同,您需要使用DTS提供的对象名映射功能,详情请参见库表列映射。 单击预检查并启动。 在迁移任务正式启动之前,会预检查连通性、权限及日志格式等。下图表示预检查成功通过。 precheck 预检查通过后,您可以在迁移任务列表中查看迁移任务的迁移状态及进度。 task_result 后续步骤 在应用程序中配置RDS实例的连接地址和账号密码,以连接到RDS实例。您还可以使用数据管理服务DMS(Data Management Service)或客户端管理RDS实例。具体操作,请参见连接MySQL实例。

1934890530796658 2020-03-25 19:18:04 0 浏览量 回答数 0

问题

RDS的数据源如何配置?

轩墨 2019-12-01 20:55:59 839 浏览量 回答数 0

回答

1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。 这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。 〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。这就是“一张原始单证对应多个实体”的典型例子。 2. 主键与外键 一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。 主键与外键的设计,在全局数据库的设计中,占有重要地位。当全局数据库的设计完成以后,有个美国数据库设计专家说:“键,到处都是键,除了键之外,什么也没有”,这就是他的数据库设计经验之谈,也反映了他对信息系统核心(数据模型)的高度抽象思想。 因为:主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。 3. 基本表的性质 基本表与中间表、临时表不同,因为它具有如下四个特性: 原子性。基本表中的字段是不可再分解的。原始性。基本表中的记录是原始数据(基础数据)的记录。演绎性。由基本表与代码表中的数据,可以派生出所有的输出数据。稳定性。基本表的结构是相对稳定的,表中的记录是要长期保存的。理解基本表的性质后,在设计数据库时,就能将基本表与中间表、临时表区分开来。 4. 范式标准 基本表及其字段之间的关系, 应尽量满足第三范式。但是,满足第三范式的数据库设计,往往不是最好的设计。为了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余,达到以空间换时间的目的。〖例2〗:有一张存放商品的基本表,如表1所示。“金额”这个字段的存在,表明该表的设计不满足第三范式,因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。在Rose 2002中,规定列有两种类型:数据列和计算列。“金额”这样的列被称为“计算列”,而“单价”和“数量”这样的列被称为“数据列”。640?wx_fmt=png 表1 商品表的表结构 5. 通俗地理解三个范式 通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解): 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性; 第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。 没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。 6. 要善于识别与正确处理多对多的关系 若两个实体之间存在多对多的关系,则应消除这种关系。消除的办法是,在两者之间增加第三个实体。这样,原来一个多对多的关系,现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。 这里的第三个实体,实质上是一个较复杂的关系,它对应一张基本表。一般来讲,数据库设计工具不能识别多对多的关系,但能处理多对多的关系。 〖例3〗:在“图书馆信息系统”中,“图书”是一个实体,“读者”也是一个实体。这两个实体之间的关系,是一个典型的多对多关系:一本图书在不同时间可以被多个读者借阅,一个读者又可以借多本图书。为此,要在二者之间增加第三个实体,该实体取名为“借还书”,它的属性为:借还时间、借还标志(0表示借书,1表示还书),另外,它还应该有两个外键(“图书”的主键,“读者”的主键),使它能与“图书”和“读者”连接。 7. 主键PK的取值方法 PK是供程序员使用的表间连接工具,可以是一无物理意义的数字串, 由程序自动加1来实现。也可以是有物理意义的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时,建议字段的个数不要太多,多了不但索引占用空间大,而且速度也慢。 8. 正确认识数据冗余 主键与外键在多表中的重复出现, 不属于数据冗余,这个概念必须清楚,事实上有许多人还不清楚。非键字段的重复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。高级冗余不是字段的重复出现,而是字段的派生出现。〖例4〗:商品中的“单价、数量、金额”三个字段,“金额”就是由“单价”乘以“数量”派生出来的,它就是冗余,而且是一种高级冗余。冗余的目的是为了提高处理速度。 只有低级冗余才会增加数据的不一致性,因为同一数据,可能从不同时间、地点、角色上多次录入。因此,我们提倡高级冗余(派生性冗余),反对低级冗余(重复性冗余)。 9. E--R图没有标准答案 信息系统的E--R图没有标准答案,因为它的设计与画法不是惟一的,只要它覆盖了系统需求的业务范围和功能内容,就是可行的。反之要修改E--R图。尽管它没有惟一的标准答案,并不意味着可以随意设计。好的E—R图的标准是:结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。 10. 视图技术在数据库设计中很有用 与基本表、代码表、中间表不同,视图是一种虚表,它依赖数据源的实表而存在。视图是供程序员使用数据库的一个窗口,是基表数据综合的一种形式, 是数据处理的一种方法,是用户数据保密的一种手段。 为了进行复杂处理、提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层。若三层视图仍不够用, 则应在视图上定义临时表, 在临时表上再定义视图。这样反复交迭定义, 视图的深度就不受限制了。 对于某些与国家政治、经济、技术、军事和安全利益有关的信息系统,视图的作用更加重要。这些系统的基本表完成物理设计之后,立即在基本表上建立第一层视图,这层视图的个数和结构,与基本表的个数和结构是完全相同。并且规定,所有的程序员,一律只准在视图上操作。 只有数据库管理员,带着多个人员共同掌握的“安全钥匙”,才能直接在基本表上操作。请读者想想:这是为什么? 11. 中间表、报表和临时表 中间表是存放统计数据的表,它是为数据仓库、输出报表或查询结果而设计的,有时它没有主键与外键(数据仓库除外)。临时表是程序员个人设计的,存放临时记录,为个人所用。基表和中间表由DBA维护,临时表由程序员自己用程序自动维护。 12. 完整性约束表现在三个方面 域的完整性:用Check来实现约束,在数据库设计工具中,对字段的取值范围进行定义时,有一个Check按钮,通过它定义字段的值城。 参照完整性:用PK、FK、表级触发器来实现。用户定义完整性:它是一些业务规则,用存储过程和触发器来实现。 13. 防止数据库设计打补丁的方法是“三少原则” 1、一个数据库中表的个数越少越好。只有表的个数少了,才能说明系统的E--R图少而精,去掉了重复的多余的实体,形成了对客观世界的高度抽象,进行了系统的数据集成,防止了打补丁式的设计; 2、一个表中组合主键的字段个数越少越好。因为主键的作用,一是建主键索引,二是做为子表的外键,所以组合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间; 3、一个表中的字段个数越少越好。只有字段的个数少了,才能说明在系统中不存在数据重复,且很少有数据冗余,更重要的是督促读者学会“列变行”,这样就防止了将子表中的字段拉入到主表中去,在主表中留下许多空余的字段。所谓“列变行”,就是将主表中的一部分内容拉出去,另外单独建一个子表。这个方法很简单,有的人就是不习惯、不采纳、不执行。 数据库设计的实用原则是:在数据冗余和处理速度之间找到合适的平衡点。“三少”是一个整体概念,综合观点,不能孤立某一个原则。该原则是相对的,不是绝对的。“三多”原则肯定是错误的。试想:若覆盖系统同样的功能,一百个实体(共一千个属性) 的E--R图,肯定比二百个实体(共二千个属性)的E--R图,要好得多。 提倡“三少”原则,是叫读者学会利用数据库设计技术进行系统的数据集成。数据集成的步骤是将文件系统集成为应用数据库,将应用数据库集成为主题数据库,将主题数据库集成为全局综合数据库。 集成的程度越高,数据共享性就越强,信息孤岛现象就越少,整个企业信息系统的全局E—R图中实体的个数、主键的个数、属性的个数就会越少。提倡“三少”原则的目的,是防止读者利用打补丁技术,不断地对数据库进行增删改,使企业数据库变成了随意设计数据库表的“垃圾堆”,或数据库表的“大杂院”,最后造成数据库中的基本表、代码表、中间表、临时表杂乱无章,不计其数,导致企事业单位的信息系统无法维护而瘫痪。 “三多”原则任何人都可以做到,该原则是“打补丁方法”设计数据库的歪理学说。“三少”原则是少而精的原则,它要求有较高的数据库设计技巧与艺术,不是任何人都能做到的,因为该原则是杜绝用“打补丁方法”设计数据库的理论依据。 14. 提高数据库运行效率的办法 在给定的系统硬件和系统软件条件下,提高数据库系统的运行效率的办法是:在数据库物理设计时,降低范式,增加冗余, 少用触发器, 多用存储过程。 当计算非常复杂、而且记录条数非常巨大时(例如一千万条),复杂计算要先在数据库外面,以文件系统方式用C++语言计算处理完成之后,最后才入库追加到表中去。这是电信计费系统设计的经验。 发现某个表的记录太多,例如超过一千万条,则要对该表进行水平分割。水平分割的做法是,以该表主键PK的某个值为界线,将该表的记录水平分割为两个表。若发现某个表的字段太多,例如超过八十个,则垂直分割该表,将原来的一个表分解为两个表。 对数据库管理系统DBMS进行系统优化,即优化各种系统参数,如缓冲区个数。在使用面向数据的SQL语言进行程序设计时,尽量采取优化算法。 总之,要提高数据库的运行效率,必须从数据库系统级优化、数据库设计级优化、程序实现级优化,这三个层次上同时下功夫。

茶什i 2019-12-27 15:54:46 0 浏览量 回答数 0

问题

使用 DTS 迁移 MySQL 数据

云栖大讲堂 2019-12-01 21:40:55 1317 浏览量 回答数 0

回答

对于数据可靠性有强需求的业务场景或是有监管需求的金融业务场景,RDS MySQL提供异地灾备实例,帮助用户提升数据可靠性。 背景介绍 RDS通过数据传输服务(DTS)实现主实例和异地灾备实例之间的实时同步。主实例和灾备实例均搭建主备高可用架构,当主实例所在区域发生突发性自然灾害等状况,主实例(Master)和备实例(Slave)均无法连接时,可将异地灾备实例切换为主实例,在应用端修改数据库连接地址后,即可快速恢复应用的业务访问。 灾备实例可通过DTS管理控制台实现同步对象变更、同步速度设置、延迟报警等同步链路原生功能,详细信息请参见DTS产品文档。 灾备实例拓扑图如下图所示。 灾备实例还有以下功能特点: 提供独立的数据库连接地址,由用户应用端自助控制连接。 使用主备高可用架构。 支持按小时计费,即开即用、即停即止。 提供独立的白名单配置、账号管理。 计费说明 RDS灾备实例与主实例配置完全相同,且RDS通过DTS实现主实例和异地灾备实例之间的实时同步。因此,创建灾备实例会同时产生RDS和DTS两种费用,价格详情请分别参见云数据库 RDS 详细价格信息和数据传输详细价格信息。 前提条件 实例版本如下: MySQL 8.0高可用版/三节点企业版 MySQL 5.7高可用版/三节点企业版 MySQL 5.6 主实例必须有内网地址。 主实例位于以下地域: 华东1(杭州) 华东2(上海) 华北1(青岛) 华北2(北京) 华南1(深圳) 中国(香港) 新加坡 美国(弗吉尼亚) 功能限制 灾备实例不支持备份设置、备份恢复、数据迁移、数据库管理、申请外网访问地址、修改连接地址功能。 删库操作不会同步至灾备实例,请您登录灾备实例通过SQL命令手动删除。 操作步骤 登录RDS 管理控制台。 在页面左上角,选择实例所在地域。选择地域 找到目标实例,单击实例ID。 单击右侧实例分布中的添加灾备实例。 在创建同步作业 页面输入数据库账号密码。 说明 帐号需要具备Replication slave、 Replication client及所有同步对象的Select权限。 MySQL 5.6版本不需要输入账号密码,请跳过该步骤。 单击立即购买实例,购买灾备实例。 在目标RDS实例购买窗口选择实例所在地域,单击立即购买。 说明 购买灾备实例暂仅支持选择地域,计费方式仅支持按量付费,其余设置信息默认与主实例一致。若有灾备实例升级需求,可在创建成功后在控制台对灾备实例进行变更配置。 创建灾备实例需要数分钟时间,在此期间请勿关闭该窗口,否则灾备实例可能会创建失败。 灾备实例购买成功后,实例ID自动添加到目标实例ID中,请单击立即创建账号跳转到账号管理页面创建高权限账号用于迁移。 说明 MySQL 5.6会自动创建同步账号供DTS同步使用,请跳过此步骤。 立即创建账号 创建完成后回到创建同步作业页面填写账号密码,然后单击授权白名单并进入下一步。 说明 MySQL 5.6请直接单击授权白名单并进入下一步,等待账号创建后单击下一步。 在源库对象中选择要迁移的对象,单击>将要迁移的对象放入已选择对象中,单击下一步。 说明 如果需要批量修改表名称,可以在选择表之后选择要进行库表名称批量更改,然后单击高级设置并进行批量修改。批量修改库表名 选择同步初始化类型,然后单击预检查并启动。 说明 同步初始化指将本地实例中同步对象的结构及数据迁移一份到灾备实例中,作为后续增量同步数据的基础。同步初始化有结构初始化和全量数据初始化可选,首次同步数据时,两者均需选择。 以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 13。 单击失败的检测项后的,查看失败详细信息,根据失败详细信息完成错误排查。 错误排查完毕后,在同步作业列表页面,单击当前同步任务后的启动同步。 系统预检查通过后,单击关闭,自动启动同步任务。 在DTS数据同步列表页面可以查询创建的同步任务,并可以对同步任务进行修改同步对象、设置监控报警、修改同步速度等操作,详情请参见 DTS 产品文档。 说明 为保障灾备实例数据的实时性,请不要暂停同步灾备实例的同步任务。 常见问题 灾备实例不能包年包月吗? 灾备实例当前仅支持按量付费,不支持包年包月。 实例怎么突然多了个帐号dtssyncwriter? 对于MySQL 5.6实例,创建灾备实例时会自动创建账号dtssyncwriter供DTS同步使用,请勿对该账号进行任何修改或删除操作,否则将引起同步异常。

游客yl2rjx5yxwcam 2020-03-08 13:59:00 0 浏览量 回答数 0

问题

E-MapReduce表管理是什么?

nicenelly 2019-12-01 21:17:33 1230 浏览量 回答数 0

问题

E-MapReduce表管理是什么?

nicenelly 2019-12-01 21:22:15 916 浏览量 回答数 0

回答

错误(error )是指人们在使用软、硬件的时候,软、硬件不能正常操作的一种现象。由于错误的类型很多,为了对错误进行区分,系统设定了错误代码(error code),软、硬件在运行中如果发生错误,将通过它内部的原有的设定判断、识别而通过错误代码的显示方式给操作者,操作者通过错误代码识别,快速找到软、硬件不能正常操作的具体原因。windows错误代码列举1100 已经到达磁带的物理尽头。1101 磁带访问到文件标记。1102 到达磁带或分区首部。1103 磁带访问到文件组的末尾。1104 磁带上没有其他数据。1105 磁带无法分区。1106 访问多重卷分区的新磁带时,当前的区块大小不正确。1107 加载磁带时,找不到磁带分区信息。1108 无法锁定媒体退出功能。1109 无法卸载媒体。1110 驱动器中的媒体已经更改。1111 已经复位I/O 总线。1112 驱动器中没有媒体。1113 在目标多字节代码页中不存在对单码字符的映射。1114 动态链接库 (DLL) 初始化例程失败。1115 正在关闭系统。1116 无法终止系统关机,因为没有进行中的关机操作。1117 由于 I/O 设备出现错误,无法运行该请求。1118 串行设备初始化失败。将卸载串行驱动程序。1119 无法打开正与其他设备共享中断请求 (IRQ) 的设备。至少有一个使用该 IRQ 的设备已经打开。1120 由于再次写入串行口,串行 I/O 操作已结束。(IOCTL_SERIAL_XOFF_COUNTER 为零。)1121 由于超时,串行 I/O 操作已结束。 (IOCTL_SERIAL_XOFF_COUNTER 未达到零。)1122 在软盘上找不到标识符地址标记。1123 软盘扇区标识符字段与软盘控制器磁道地址不匹配。1124 软盘控制器报告软盘驱动程序不能识别的错误。1125 软盘控制器返回的结果和注册的不一致。1126 访问硬盘时,再校准操作失败,再试一次后也无法操作。1127 访问硬盘时,磁盘操作失败,再试一次后仍没有作用。1128 访问硬盘时,需要重启动磁盘控制器,但仍未成功。1129 磁带已卷到尽头。1130 可用的服务器存储区不足,无法执行该命令。1131 检测到潜在的死锁情况。1132 指定的基址或文件偏移量没有正确对齐。1140 试图更改系统电源状态的操作被另一应用程序或驱动程序禁止。1141 系统 BIOS 无法更改系统电源状态。1142 试图在一文件上创建超过系统允许数额的链接。1150 指定的程序需要新的 Windows 版本。1151 指定的程序不是 Windows 或 MS-DOS 程序。1152 无法启动指定程序的多个实例。1153 指定的程序是为 Windows 的早期版本编写的。1154 运行此应用程序所需的某个库文件已损。1155 没有应用程序与该操作中所指定的文件关联。1156 将命令发送到应用程序时出现错误。1157 找不到运行此应用程序所需的某个库文件。1158 当前进程已使用了 Window 管理器对象的系统允许的所有句柄。1159 消息只能与同步操作一起使用。1160 指出的源元素没有媒体。1161 指出的目标元素已包含媒体。1162 指出的元素不存在。1163 指出的元素是未显示的存储资源的一部分。1164 指出的设备需要重新初始化,因为硬件有错误。1165 设备显示在尝试进一步操作之前需要清除。1166 设备显示它的门仍是打开状态。1167 设备没有连接。1168 找不到元素。1169 索引中没有同指定项相匹配的项。1170 在对象上不存在指定的属性集。1171 传递到 GetMouseMovePoints 的点不在缓冲区中。1172 跟踪(工作站)服务没运行。1173 找不到卷 ID。1175 无法删除要被替换的文件。1176 无法将替换文件移到要被替换的文件。要被替换的文件保持原来的名称。1177 无法将替换文件移到要被替换的文件。要被替换的文件已被重新命名为备份名称。1178 卷更改记录被删除。1179 卷更改记录服务不处于活动中。1180 找到一份文件,但是可能不是正确的文件。1181 日志项已从日志中删除。1200 指定的设备名无效。1201 设备当前虽然未连接,但它是记忆连接。1202 试图记起已经记住的设备。1203 网络供应商不接受给定的网络路径。1204 指定的网络供应商名无效。1205 无法打开网络连接配置文件。1206 网络连接配置文件已损坏。1207 无法列举非包容类。1208 出现扩展错误。1209 指定组名的格式无效。1210 指定计算机名的格式无效。1211 指定事件名的格式无效。1212 指定域名的格式无效。1213 指定服务名的格式无效。1214 指定网络名的格式无效。1215 指定共享名的格式无效。1216 指定密码的格式无效。1217 指定的邮件名无效。1218 指定邮件目的地的格式无效。1219 所提供的凭据与现有凭据设置冲突。1220 试图与网络服务器建立会话,但与该服务器建立的会话太多。1221 网络上的其他计算机已经使用该工作组或域名。1222 网络不存在或者没有启动。1223 用户已经取消该操作。1224 所要求的操作无法在已经打开用户映射区域的文件中运行。1225 远程系统拒绝网络连接。1226 已经关闭网络连接。1227 网络传输的终点已经有一个地址与其关联。1228 网络终点尚未与地址关联。1229 试图在不存在的网络连接中操作。1230 试图在活动的网络连接上进行无效操作。1231-1233不能访问网络位置。有关网络疑难解答的信息,请参阅 Windows 帮助。1234 远程系统的目标网络端点没有运行任何服务。1235 该请求已经终止。1236 本地系统已经终止网络连接。1237 无法完成操作。请再试一次。1238 无法创建到该服务器的连接,因为已经到达了该帐户同时连接的最大数目。1239 试图在该帐户未授权的时间内登录。1240 尚未授权此帐户从该站登录网络。1241 网络地址无法用于要求的操作。1242 服务已经注册。1243 指定的服务不存在。1244 由于尚未验证用户身份,无法执行要求的操作。1245 由于用户尚未登录网络,无法运行要求的操作。指定的服务不存在。1246 继续工作。1247 完成初始化操作后,试图再次运行初始化操作。1248 没有其他本地设备。1249 指定的站点不存在。1250 具有指定名称的域控制器已经存在。1251 只有连接到服务器上时,才支持该操作。1252 即使没有改动,组策略框架也应该调用扩展。1253 指定的用户没有一个有效的配置文件。1254 Microsoft Small Business Server 不支持此操作。1300 不是对所有的调用方分配引用特权。1301 帐户名与安全标识符之间的映射未完成。1302 没有为该帐户明确地设置系统配额限制。1303 没有可用的密钥。返回已知的密钥。1304 密码太复杂,无法转换成 LAN Manager 密码。返回的 LAN Manager 密码是空字符串。1305 修订级别未知。1306 表示两个修订级别不兼容。1307 无法将此安全标识符指定为该对象的拥有者。1308 无法将此安全标识符指定为主要的对象组。1309 当前并未模拟客户的线程试图操作模拟令牌。1310 不可以禁用该组。1311 没有可用的登录服务器处理登录请求。1312 指定的登录会话不存在。该会话可能已终止。1313 指定的权限不存在。1314 客户不保留请求的权限。1315 提供的名称不是正确的帐户名称格式。1316 指定的用户已经存在。1317 指定的用户不存在。1318 指定的组已经存在。1319 指定的组不存在。1320 或者指定的用户帐户已经是某个特定组的成员,或者也可能指定的组非空而不能被删除。1321 指定的用户帐户不是所指定组帐户的成员。1322 上次保留的管理帐户无法关闭或删除。1323 无法更新密码。所输入的密码不正确。1324 无法更新密码。所提供的新密码包含不可用于密码的值。1325 无法更新密码。为新密码提供的值不符合字符域的长度、复杂性或历史要求。1326 登录失败: 用户名未知或密码错误。1327 登录失败: 用户帐户限制。1328 登录失败: 违反帐户登录时间限制。1329 登录失败: 禁止用户登录到该计算机上。1330 登录失败: 指定的帐户密码已过期。1331 登录失败: 当前禁用帐户。1332 未完成帐户名与安全性标识符之间的映射。1333 一次请求的本地用户标识符(LUID)太多。1334 没有其他可用的本地用户标识符(LUID)。1335 对这个特定使用来说,安全标识符的子部分是无效的。1336 访问控制清单(ACL)结构无效。1337 安全标识符结构无效。1338 安全描述符结构无效。1340 无法创建继承的访问控制列表(ACL)或访问控制项目(ACE)。1341 当前已禁用服务器。1342 当前已启用服务器。1343 所提供的值是无效的标识符授权值。1344 没有更多的内存用于更新安全信息。1345 指定的属性无效,或指定的属性与整个组的属性不兼容。1346 或者没有提供所申请的模仿级别,或者提供的模仿级别无效。1347 无法打开匿名级安全性符号。1348 所请求的验证信息类别无效。1349 该类符号不能以所尝试的方式使用。1350 无法在没有相关安全性的对象上运行安全操作。1351 未能从域控制器读取配置信息,或者是因为机器不可使用,或者是访问被拒绝。 错误(error )是指人们在使用软、硬件的时候,软、硬件不能正常操作的一种现象。由于错误的类型很多,为了对错误进行区分,系统设定了错误代码(error code),软、硬件在运行中如果发生错误,将通过它内部的原有的设定判断、识别而通过错误代码的显示方式给操作者,操作者通过错误代码识别,快速找到软、硬件不能正常操作的具体原因。windows错误代码列举1100 已经到达磁带的物理尽头。1101 磁带访问到文件标记。1102 到达磁带或分区首部。1103 磁带访问到文件组的末尾。1104 磁带上没有其他数据。1105 磁带无法分区。1106 访问多重卷分区的新磁带时,当前的区块大小不正确。1107 加载磁带时,找不到磁带分区信息。1108 无法锁定媒体退出功能。1109 无法卸载媒体。1110 驱动器中的媒体已经更改。1111 已经复位I/O 总线。1112 驱动器中没有媒体。1113 在目标多字节代码页中不存在对单码字符的映射。1114 动态链接库 (DLL) 初始化例程失败。1115 正在关闭系统。1116 无法终止系统关机,因为没有进行中的关机操作。1117 由于 I/O 设备出现错误,无法运行该请求。1118 串行设备初始化失败。将卸载串行驱动程序。1119 无法打开正与其他设备共享中断请求 (IRQ) 的设备。至少有一个使用该 IRQ 的设备已经打开。1120 由于再次写入串行口,串行 I/O 操作已结束。(IOCTL_SERIAL_XOFF_COUNTER 为零。)1121 由于超时,串行 I/O 操作已结束。 (IOCTL_SERIAL_XOFF_COUNTER 未达到零。)1122 在软盘上找不到标识符地址标记。1123 软盘扇区标识符字段与软盘控制器磁道地址不匹配。1124 软盘控制器报告软盘驱动程序不能识别的错误。1125 软盘控制器返回的结果和注册的不一致。1126 访问硬盘时,再校准操作失败,再试一次后也无法操作。1127 访问硬盘时,磁盘操作失败,再试一次后仍没有作用。1128 访问硬盘时,需要重启动磁盘控制器,但仍未成功。1129 磁带已卷到尽头。1130 可用的服务器存储区不足,无法执行该命令。1131 检测到潜在的死锁情况。1132 指定的基址或文件偏移量没有正确对齐。1140 试图更改系统电源状态的操作被另一应用程序或驱动程序禁止。1141 系统 BIOS 无法更改系统电源状态。1142 试图在一文件上创建超过系统允许数额的链接。1150 指定的程序需要新的 Windows 版本。1151 指定的程序不是 Windows 或 MS-DOS 程序。1152 无法启动指定程序的多个实例。1153 指定的程序是为 Windows 的早期版本编写的。1154 运行此应用程序所需的某个库文件已损。1155 没有应用程序与该操作中所指定的文件关联。1156 将命令发送到应用程序时出现错误。1157 找不到运行此应用程序所需的某个库文件。1158 当前进程已使用了 Window 管理器对象的系统允许的所有句柄。1159 消息只能与同步操作一起使用。1160 指出的源元素没有媒体。1161 指出的目标元素已包含媒体。1162 指出的元素不存在。1163 指出的元素是未显示的存储资源的一部分。1164 指出的设备需要重新初始化,因为硬件有错误。1165 设备显示在尝试进一步操作之前需要清除。1166 设备显示它的门仍是打开状态。1167 设备没有连接。1168 找不到元素。1169 索引中没有同指定项相匹配的项。1170 在对象上不存在指定的属性集。1171 传递到 GetMouseMovePoints 的点不在缓冲区中。1172 跟踪(工作站)服务没运行。1173 找不到卷 ID。1175 无法删除要被替换的文件。1176 无法将替换文件移到要被替换的文件。要被替换的文件保持原来的名称。1177 无法将替换文件移到要被替换的文件。要被替换的文件已被重新命名为备份名称。1178 卷更改记录被删除。1179 卷更改记录服务不处于活动中。1180 找到一份文件,但是可能不是正确的文件。1181 日志项已从日志中删除。1200 指定的设备名无效。1201 设备当前虽然未连接,但它是记忆连接。1202 试图记起已经记住的设备。1203 网络供应商不接受给定的网络路径。1204 指定的网络供应商名无效。1205 无法打开网络连接配置文件。1206 网络连接配置文件已损坏。1207 无法列举非包容类。1208 出现扩展错误。1209 指定组名的格式无效。1210 指定计算机名的格式无效。1211 指定事件名的格式无效。1212 指定域名的格式无效。1213 指定服务名的格式无效。1214 指定网络名的格式无效。1215 指定共享名的格式无效。1216 指定密码的格式无效。1217 指定的邮件名无效。1218 指定邮件目的地的格式无效。1219 所提供的凭据与现有凭据设置冲突。1220 试图与网络服务器建立会话,但与该服务器建立的会话太多。1221 网络上的其他计算机已经使用该工作组或域名。1222 网络不存在或者没有启动。1223 用户已经取消该操作。1224 所要求的操作无法在已经打开用户映射区域的文件中运行。1225 远程系统拒绝网络连接。1226 已经关闭网络连接。1227 网络传输的终点已经有一个地址与其关联。1228 网络终点尚未与地址关联。1229 试图在不存在的网络连接中操作。1230 试图在活动的网络连接上进行无效操作。1231-1233不能访问网络位置。有关网络疑难解答的信息,请参阅 Windows 帮助。1234 远程系统的目标网络端点没有运行任何服务。1235 该请求已经终止。1236 本地系统已经终止网络连接。1237 无法完成操作。请再试一次。1238 无法创建到该服务器的连接,因为已经到达了该帐户同时连接的最大数目。1239 试图在该帐户未授权的时间内登录。1240 尚未授权此帐户从该站登录网络。1241 网络地址无法用于要求的操作。1242 服务已经注册。1243 指定的服务不存在。1244 由于尚未验证用户身份,无法执行要求的操作。1245 由于用户尚未登录网络,无法运行要求的操作。指定的服务不存在。1246 继续工作。1247 完成初始化操作后,试图再次运行初始化操作。1248 没有其他本地设备。1249 指定的站点不存在。1250 具有指定名称的域控制器已经存在。1251 只有连接到服务器上时,才支持该操作。1252 即使没有改动,组策略框架也应该调用扩展。1253 指定的用户没有一个有效的配置文件。1254 Microsoft Small Business Server 不支持此操作。1300 不是对所有的调用方分配引用特权。1301 帐户名与安全标识符之间的映射未完成。1302 没有为该帐户明确地设置系统配额限制。1303 没有可用的密钥。返回已知的密钥。1304 密码太复杂,无法转换成 LAN Manager 密码。返回的 LAN Manager 密码是空字符串。1305 修订级别未知。1306 表示两个修订级别不兼容。1307 无法将此安全标识符指定为该对象的拥有者。1308 无法将此安全标识符指定为主要的对象组。1309 当前并未模拟客户的线程试图操作模拟令牌。1310 不可以禁用该组。1311 没有可用的登录服务器处理登录请求。1312 指定的登录会话不存在。该会话可能已终止。1313 指定的权限不存在。1314 客户不保留请求的权限。1315 提供的名称不是正确的帐户名称格式。1316 指定的用户已经存在。1317 指定的用户不存在。1318 指定的组已经存在。1319 指定的组不存在。1320 或者指定的用户帐户已经是某个特定组的成员,或者也可能指定的组非空而不能被删除。1321 指定的用户帐户不是所指定组帐户的成员。1322 上次保留的管理帐户无法关闭或删除。1323 无法更新密码。所输入的密码不正确。1324 无法更新密码。所提供的新密码包含不可用于密码的值。1325 无法更新密码。为新密码提供的值不符合字符域的长度、复杂性或历史要求。1326 登录失败: 用户名未知或密码错误。1327 登录失败: 用户帐户限制。1328 登录失败: 违反帐户登录时间限制。1329 登录失败: 禁止用户登录到该计算机上。1330 登录失败: 指定的帐户密码已过期。1331 登录失败: 当前禁用帐户。1332 未完成帐户名与安全性标识符之间的映射。1333 一次请求的本地用户标识符(LUID)太多。1334 没有其他可用的本地用户标识符(LUID)。1335 对这个特定使用来说,安全标识符的子部分是无效的。1336 访问控制清单(ACL)结构无效。1337 安全标识符结构无效。1338 安全描述符结构无效。1340 无法创建继承的访问控制列表(ACL)或访问控制项目(ACE)。1341 当前已禁用服务器。1342 当前已启用服务器。1343 所提供的值是无效的标识符授权值。1344 没有更多的内存用于更新安全信息。1345 指定的属性无效,或指定的属性与整个组的属性不兼容。1346 或者没有提供所申请的模仿级别,或者提供的模仿级别无效。1347 无法打开匿名级安全性符号。1348 所请求的验证信息类别无效。1349 该类符号不能以所尝试的方式使用。1350 无法在没有相关安全性的对象上运行安全操作。1351 未能从域控制器读取配置信息,或者是因为机器不可使用,或者是访问被拒绝。

1652919821114713 2019-12-02 00:43:41 0 浏览量 回答数 0

问题

得到一个无法得到<类的通知。模型的报告。用于连接到Postgres数据库的django通知的Noti

kun坤 2019-12-25 22:21:38 3 浏览量 回答数 0

问题

灾备实例

云栖大讲堂 2019-12-01 21:37:27 999 浏览量 回答数 0

回答

大数据就是多,就是多。原来的设备存不下、算不动。 ——啪菠萝·毕加索 大数据,不是随机样本,而是所有数据;不是精确性,而是混杂性;不是因果关系,而是相关关系。—— Schönberger 顾名思义“大数据”,从字面意思来理解就是“大量的数据”。 从技术的的角度来解释,大数据就是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 IBM提出大数据具有5V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。 我们所谈论的大数据实际上更多是从应用的层面,比如某公司搜集、整理了大量的用户行为信息,然后通过数据分析手段对这些信息进行分析从而得出对公司有利用价值的结果。 比如:头条的推荐机制,就是建立在对海量用户的阅读信息的搜集、分析之上。这就是大数据在现实中具体体现。 那Hadoop又是什么?它和大数据又有什么联系呢? Hadoop是一个对海量数据进行处理的分布式系统架构,可以理解为Hadoop就是一个对大量的数据进行分析的工具,和其他组件搭配使用,来完成对大量数据的收集、存储和计算。 Hadoop框架最核心的设计就是:HDFS 和 MapReduce。 HDFS为海量的数据提供了存储;MapReduce为海量的数据提供了计算。 一套完整的Hadoop大数据生态系统基本包含这些组件。 HDFS:Hadoop分布式文件系统,专门存储超大数据文件,为整个Hadoop生态圈提供了基础的存储服务。 MapReduce:分布式离线计算框架,用来处理大量的已经存储在本地的离线数据。 Storm:分布式实时计算,主要特点是实时性,用来处理实时产生的数据。 ZooKeeper:用于Hadoop的分布式协调服务。Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。 HBase:是一个建立在HDFS之上,面向列的NoSQL数据库,用于快速读/写大量数据。 Hive:基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表。 Sqoop:是一个连接工具,用于在关系数据库、数据仓库和Hadoop之间转移数据。 Pig:它是MapReduce编程的复杂性的抽象。Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig Latin)。

1748847708358317 2019-12-02 03:11:07 0 浏览量 回答数 0

问题

【精品问答】带你进入数据库领域

谙忆 2020-04-07 20:45:48 12 浏览量 回答数 1

问题

阿里云服务器 如何处理网站高并发流量问题?(含教程)

元芳啊 2019-12-01 21:54:35 1511 浏览量 回答数 1

问题

【精品问答】Python二级考试题库

珍宝珠 2019-12-01 22:03:38 1146 浏览量 回答数 2

问题

性能测试:软件测试的重中之重

云效平台 2019-12-01 21:45:09 5839 浏览量 回答数 1

问题

该来的终于来了:“第一起”基于 IPv6 的 DDoS 攻击

驻云科技 2019-12-01 21:44:35 4186 浏览量 回答数 1

回答

92题 一般来说,建立INDEX有以下益处:提高查询效率;建立唯一索引以保证数据的唯一性;设计INDEX避免排序。 缺点,INDEX的维护有以下开销:叶节点的‘分裂’消耗;INSERT、DELETE和UPDATE操作在INDEX上的维护开销;有存储要求;其他日常维护的消耗:对恢复的影响,重组的影响。 需要建立索引的情况:为了建立分区数据库的PATITION INDEX必须建立; 为了保证数据约束性需要而建立的INDEX必须建立; 为了提高查询效率,则考虑建立(是否建立要考虑相关性能及维护开销); 考虑在使用UNION,DISTINCT,GROUP BY,ORDER BY等字句的列上加索引。 91题 作用:加快查询速度。原则:(1) 如果某属性或属性组经常出现在查询条件中,考虑为该属性或属性组建立索引;(2) 如果某个属性常作为最大值和最小值等聚集函数的参数,考虑为该属性建立索引;(3) 如果某属性经常出现在连接操作的连接条件中,考虑为该属性或属性组建立索引。 90题 快照Snapshot是一个文件系统在特定时间里的镜像,对于在线实时数据备份非常有用。快照对于拥有不能停止的应用或具有常打开文件的文件系统的备份非常重要。对于只能提供一个非常短的备份时间而言,快照能保证系统的完整性。 89题 游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。 88题 事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。 87题 MySQL可以使用多个字段同时建立一个索引,叫做联合索引。在联合索引中,如果想要命中索引,需要按照建立索引时的字段顺序挨个使用,否则无法命中索引。具体原因为:MySQL使用索引时需要索引有序,假设现在建立了"name,age,school"的联合索引,那么索引的排序为: 先按照name排序,如果name相同,则按照age排序,如果age的值也相等,则按照school进行排序。因此在建立联合索引的时候应该注意索引列的顺序,一般情况下,将查询需求频繁或者字段选择性高的列放在前面。此外可以根据特例的查询或者表结构进行单独的调整。 86题 建立索引的时候一般要考虑到字段的使用频率,经常作为条件进行查询的字段比较适合。如果需要建立联合索引的话,还需要考虑联合索引中的顺序。此外也要考虑其他方面,比如防止过多的所有对表造成太大的压力。这些都和实际的表结构以及查询方式有关。 85题 存储过程是一组Transact-SQL语句,在一次编译后可以执行多次。因为不必重新编译Transact-SQL语句,所以执行存储过程可以提高性能。触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。 84题 存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。 83题 减少表连接,减少复杂 SQL,拆分成简单SQL。减少排序:非必要不排序,利用索引排序,减少参与排序的记录数。尽量避免 select *。尽量用 join 代替子查询。尽量少使用 or,使用 in 或者 union(union all) 代替。尽量用 union all 代替 union。尽量早的将无用数据过滤:选择更优的索引,先分页再Join…。避免类型转换:索引失效。优先优化高并发的 SQL,而不是执行频率低某些“大”SQL。从全局出发优化,而不是片面调整。尽可能对每一条SQL进行 explain。 82题 如果条件中有or,即使其中有条件带索引也不会使用(要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引)。对于多列索引,不是使用的第一部分,则不会使用索引。like查询是以%开头。如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。如果mysql估计使用全表扫描要比使用索引快,则不使用索引。例如,使用<>、not in 、not exist,对于这三种情况大多数情况下认为结果集很大,MySQL就有可能不使用索引。 81题 主键不能重复,不能为空,唯一键不能重复,可以为空。建立主键的目的是让外键来引用。一个表最多只有一个主键,但可以有很多唯一键。 80题 空值('')是不占用空间的,判断空字符用=''或者<>''来进行处理。NULL值是未知的,且占用空间,不走索引;判断 NULL 用 IS NULL 或者 is not null ,SQL 语句函数中可以使用 ifnull ()函数来进行处理。无法比较 NULL 和 0;它们是不等价的。无法使用比较运算符来测试 NULL 值,比如 =, <, 或者 <>。NULL 值可以使用 <=> 符号进行比较,该符号与等号作用相似,但对NULL有意义。进行 count ()统计某列的记录数的时候,如果采用的 NULL 值,会被系统自动忽略掉,但是空值是统计到其中。 79题 HEAP表是访问数据速度最快的MySQL表,他使用保存在内存中的散列索引。一旦服务器重启,所有heap表数据丢失。BLOB或TEXT字段是不允许的。只能使用比较运算符=,<,>,=>,= <。HEAP表不支持AUTO_INCREMENT。索引不可为NULL。 78题 如果想输入字符为十六进制数字,可以输入带有单引号的十六进制数字和前缀(X),或者只用(Ox)前缀输入十六进制数字。如果表达式上下文是字符串,则十六进制数字串将自动转换为字符串。 77题 Mysql服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别user,db,table_priv,columns_priv和host。 76题 在缺省模式下,MYSQL是autocommit模式的,所有的数据库更新操作都会即时提交,所以在缺省情况下,mysql是不支持事务的。但是如果你的MYSQL表类型是使用InnoDB Tables 或 BDB tables的话,你的MYSQL就可以使用事务处理,使用SET AUTOCOMMIT=0就可以使MYSQL允许在非autocommit模式,在非autocommit模式下,你必须使用COMMIT来提交你的更改,或者用ROLLBACK来回滚你的更改。 75题 它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。 74题 创建索引的时候尽量使用唯一性大的列来创建索引,由于使用b+tree做为索引,以innodb为例,一个树节点的大小由“innodb_page_size”,为了减少树的高度,同时让一个节点能存放更多的值,索引列尽量在整数类型上创建,如果必须使用字符类型,也应该使用长度较少的字符类型。 73题 当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下: 限定数据的范围: 务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内。读/写分离: 经典的数据库拆分方案,主库负责写,从库负责读。垂直分区: 根据数据库里面数据表的相关性进行拆分。简单来说垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。水平分区: 保持数据表结构不变,通过某种策略存储数据分片。这样每一片数据分散到不同的表或者库中,达到了分布式的目的。水平拆分可以支撑非常大的数据量。 72题 乐观锁失败后会抛出ObjectOptimisticLockingFailureException,那么我们就针对这块考虑一下重试,自定义一个注解,用于做切面。针对注解进行切面,设置最大重试次数n,然后超过n次后就不再重试。 71题 一致性非锁定读讲的是一条记录被加了X锁其他事务仍然可以读而不被阻塞,是通过innodb的行多版本实现的,行多版本并不是实际存储多个版本记录而是通过undo实现(undo日志用来记录数据修改前的版本,回滚时会用到,用来保证事务的原子性)。一致性锁定读讲的是我可以通过SELECT语句显式地给一条记录加X锁从而保证特定应用场景下的数据一致性。 70题 数据库引擎:尤其是mysql数据库只有是InnoDB引擎的时候事物才能生效。 show engines 查看数据库默认引擎;SHOW TABLE STATUS from 数据库名字 where Name='表名' 如下;SHOW TABLE STATUS from rrz where Name='rrz_cust';修改表的引擎alter table table_name engine=innodb。 69题 如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,就没办法再利用索引完成范围查询检索;同理,哈希索引也没办法利用索引完成排序,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实本质上也是范围查询);哈希索引也不支持多列联合索引的最左匹配规则;B+树索引的关键字检索效率比较平均,不像B树那样波动幅度大,在有大量重复键值情况下,哈希索引的效率也是极低的,因为存在所谓的哈希碰撞问题。 68题 decimal精度比float高,数据处理比float简单,一般优先考虑,但float存储的数据范围大,所以范围大的数据就只能用它了,但要注意一些处理细节,因为不精确可能会与自己想的不一致,也常有关于float 出错的问题。 67题 datetime、timestamp精确度都是秒,datetime与时区无关,存储的范围广(1001-9999),timestamp与时区有关,存储的范围小(1970-2038)。 66题 Char使用固定长度的空间进行存储,char(4)存储4个字符,根据编码方式的不同占用不同的字节,gbk编码方式,不论是中文还是英文,每个字符占用2个字节的空间,utf8编码方式,每个字符占用3个字节的空间。Varchar保存可变长度的字符串,使用额外的一个或两个字节存储字符串长度,varchar(10),除了需要存储10个字符,还需要1个字节存储长度信息(10),超过255的长度需要2个字节来存储。char和varchar后面如果有空格,char会自动去掉空格后存储,varchar虽然不会去掉空格,但在进行字符串比较时,会去掉空格进行比较。Varbinary保存变长的字符串,后面不会补\0。 65题 首先分析语句,看看是否load了额外的数据,可能是查询了多余的行并且抛弃掉了,可能是加载了许多结果中并不需要的列,对语句进行分析以及重写。分析语句的执行计划,然后获得其使用索引的情况,之后修改语句或者修改索引,使得语句可以尽可能的命中索引。如果对语句的优化已经无法进行,可以考虑表中的数据量是否太大,如果是的话可以进行横向或者纵向的分表。 64题 建立索引的时候一般要考虑到字段的使用频率,经常作为条件进行查询的字段比较适合。如果需要建立联合索引的话,还需要考虑联合索引中的顺序。此外也要考虑其他方面,比如防止过多的所有对表造成太大的压力。这些都和实际的表结构以及查询方式有关。 63题 存储过程是一些预编译的SQL语句。1、更加直白的理解:存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。2、存储过程是一个预编译的代码块,执行效率比较高,一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率,可以一定程度上确保数据安全。 62题 密码散列、盐、用户身份证号等固定长度的字符串应该使用char而不是varchar来存储,这样可以节省空间且提高检索效率。 61题 推荐使用自增ID,不要使用UUID。因为在InnoDB存储引擎中,主键索引是作为聚簇索引存在的,也就是说,主键索引的B+树叶子节点上存储了主键索引以及全部的数据(按照顺序),如果主键索引是自增ID,那么只需要不断向后排列即可,如果是UUID,由于到来的ID与原来的大小不确定,会造成非常多的数据插入,数据移动,然后导致产生很多的内存碎片,进而造成插入性能的下降。总之,在数据量大一些的情况下,用自增主键性能会好一些。 60题 char是一个定长字段,假如申请了char(10)的空间,那么无论实际存储多少内容。该字段都占用10个字符,而varchar是变长的,也就是说申请的只是最大长度,占用的空间为实际字符长度+1,最后一个字符存储使用了多长的空间。在检索效率上来讲,char > varchar,因此在使用中,如果确定某个字段的值的长度,可以使用char,否则应该尽量使用varchar。例如存储用户MD5加密后的密码,则应该使用char。 59题 一. read uncommitted(读取未提交数据) 即便是事务没有commit,但是我们仍然能读到未提交的数据,这是所有隔离级别中最低的一种。 二. read committed(可以读取其他事务提交的数据)---大多数数据库默认的隔离级别 当前会话只能读取到其他事务提交的数据,未提交的数据读不到。 三. repeatable read(可重读)---MySQL默认的隔离级别 当前会话可以重复读,就是每次读取的结果集都相同,而不管其他事务有没有提交。 四. serializable(串行化) 其他会话对该表的写操作将被挂起。可以看到,这是隔离级别中最严格的,但是这样做势必对性能造成影响。所以在实际的选用上,我们要根据当前具体的情况选用合适的。 58题 B+树的高度一般为2-4层,所以查找记录时最多只需要2-4次IO,相对二叉平衡树已经大大降低了。范围查找时,能通过叶子节点的指针获取数据。例如查找大于等于3的数据,当在叶子节点中查到3时,通过3的尾指针便能获取所有数据,而不需要再像二叉树一样再获取到3的父节点。 57题 因为事务在修改页时,要先记 undo,在记 undo 之前要记 undo 的 redo, 然后修改数据页,再记数据页修改的 redo。 Redo(里面包括 undo 的修改) 一定要比数据页先持久化到磁盘。 当事务需要回滚时,因为有 undo,可以把数据页回滚到前镜像的状态,崩溃恢复时,如果 redo log 中事务没有对应的 commit 记录,那么需要用 undo把该事务的修改回滚到事务开始之前。 如果有 commit 记录,就用 redo 前滚到该事务完成时并提交掉。 56题 redo log是物理日志,记录的是"在某个数据页上做了什么修改"。 binlog是逻辑日志,记录的是这个语句的原始逻辑,比如"给ID=2这一行的c字段加1"。 redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。 redo log是循环写的,空间固定会用完:binlog 是可以追加写入的。"追加写"是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。 最开始 MySQL 里并没有 InnoDB 引擎,MySQL 自带的引擎是 MyISAM,但是 MyISAM 没有 crash-safe 的能力,binlog日志只能用于归档。而InnoDB 是另一个公司以插件形式引入 MySQL 的,既然只依靠 binlog 是没有 crash-safe 能力的,所以 InnoDB 使用另外一套日志系统,也就是 redo log 来实现 crash-safe 能力。 55题 重做日志(redo log)      作用:确保事务的持久性,防止在发生故障,脏页未写入磁盘。重启数据库会进行redo log执行重做,达到事务一致性。 回滚日志(undo log)  作用:保证数据的原子性,保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读。 二进 制日志(binlog)    作用:用于主从复制,实现主从同步;用于数据库的基于时间点的还原。 错误日志(errorlog) 作用:Mysql本身启动,停止,运行期间发生的错误信息。 慢查询日志(slow query log)  作用:记录执行时间过长的sql,时间阈值可以配置,只记录执行成功。 一般查询日志(general log)    作用:记录数据库的操作明细,默认关闭,开启后会降低数据库性能 。 中继日志(relay log) 作用:用于数据库主从同步,将主库发来的bin log保存在本地,然后从库进行回放。 54题 MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。 死锁: 是指两个或两个以上的进程在执行过程中。因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。 那么对应的解决死锁问题的关键就是:让不同的session加锁有次序。死锁的解决办法:1.查出的线程杀死。2.设置锁的超时时间。3.指定获取锁的顺序。 53题 当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性(脏读,不可重复读,幻读等),可能产生死锁。 乐观锁:乐观锁不是数据库自带的,需要我们自己去实现。 悲观锁:在进行每次操作时都要通过获取锁才能进行对相同数据的操作。 共享锁:加了共享锁的数据对象可以被其他事务读取,但不能修改。 排他锁:当数据对象被加上排它锁时,一个事务必须得到锁才能对该数据对象进行访问,一直到事务结束锁才被释放。 行锁:就是给某一条记录加上锁。 52题 Mysql是关系型数据库,MongoDB是非关系型数据库,数据存储结构的不同。 51题 关系型数据库优点:1.保持数据的一致性(事务处理)。 2.由于以标准化为前提,数据更新的开销很小。 3. 可以进行Join等复杂查询。 缺点:1、为了维护一致性所付出的巨大代价就是其读写性能比较差。 2、固定的表结构。 3、高并发读写需求。 4、海量数据的高效率读写。 非关系型数据库优点:1、无需经过sql层的解析,读写性能很高。 2、基于键值对,数据没有耦合性,容易扩展。 3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型。 缺点:1、不提供sql支持,学习和使用成本较高。 2、无事务处理,附加功能bi和报表等支持也不好。 redis与mongoDB的区别: 性能:TPS方面redis要大于mongodb。 可操作性:mongodb支持丰富的数据表达,索引,redis较少的网络IO次数。 可用性:MongoDB优于Redis。 一致性:redis事务支持比较弱,mongoDB不支持事务。 数据分析:mongoDB内置了数据分析的功能(mapreduce)。 应用场景:redis数据量较小的更性能操作和运算上,MongoDB主要解决海量数据的访问效率问题。 50题 如果Redis被当做缓存使用,使用一致性哈希实现动态扩容缩容。如果Redis被当做一个持久化存储使用,必须使用固定的keys-to-nodes映射关系,节点的数量一旦确定不能变化。否则的话(即Redis节点需要动态变化的情况),必须使用可以在运行时进行数据再平衡的一套系统,而当前只有Redis集群可以做到这样。 49题 分区可以让Redis管理更大的内存,Redis将可以使用所有机器的内存。如果没有分区,你最多只能使用一台机器的内存。分区使Redis的计算能力通过简单地增加计算机得到成倍提升,Redis的网络带宽也会随着计算机和网卡的增加而成倍增长。 48题 除了缓存服务器自带的缓存失效策略之外(Redis默认的有6种策略可供选择),我们还可以根据具体的业务需求进行自定义的缓存淘汰,常见的策略有两种: 1.定时去清理过期的缓存; 2.当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数据并更新缓存。 两者各有优劣,第一种的缺点是维护大量缓存的key是比较麻烦的,第二种的缺点就是每次用户请求过来都要判断缓存失效,逻辑相对比较复杂!具体用哪种方案,可以根据应用场景来权衡。 47题 Redis提供了两种方式来作消息队列: 一个是使用生产者消费模式模式:会让一个或者多个客户端监听消息队列,一旦消息到达,消费者马上消费,谁先抢到算谁的,如果队列里没有消息,则消费者继续监听 。另一个就是发布订阅者模式:也是一个或多个客户端订阅消息频道,只要发布者发布消息,所有订阅者都能收到消息,订阅者都是平等的。 46题 Redis的数据结构列表(list)可以实现延时队列,可以通过队列和栈来实现。blpop/brpop来替换lpop/rpop,blpop/brpop阻塞读在队列没有数据的时候,会立即进入休眠状态,一旦数据到来,则立刻醒过来。Redis的有序集合(zset)可以用于实现延时队列,消息作为value,时间作为score。Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误。 45题 1.热点数据缓存:因为Redis 访问速度块、支持的数据类型比较丰富。 2.限时业务:expire 命令设置 key 的生存时间,到时间后自动删除 key。 3.计数器:incrby 命令可以实现原子性的递增。 4.排行榜:借助 SortedSet 进行热点数据的排序。 5.分布式锁:利用 Redis 的 setnx 命令进行。 6.队列机制:有 list push 和 list pop 这样的命令。 44题 一致哈希 是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K/n 个关键字重新映射,其中K是关键字的数量, n是槽位数量。然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。 43题 RDB的优点:适合做冷备份;读写服务影响小,reids可以保持高性能;重启和恢复redis进程,更加快速。RDB的缺点:宕机会丢失最近5分钟的数据;文件特别大时可能会暂停数毫秒,或者甚至数秒。 AOF的优点:每个一秒执行fsync操作,最多丢失1秒钟的数据;以append-only模式写入,没有任何磁盘寻址的开销;文件过大时,不会影响客户端读写;适合做灾难性的误删除的紧急恢复。AOF的缺点:AOF日志文件比RDB数据快照文件更大,支持写QPS比RDB支持的写QPS低;比RDB脆弱,容易有bug。 42题 对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。Redis的操作之所以是原子性的,是因为Redis是单线程的。而在程序中执行多个Redis命令并非是原子性的,这也和普通数据库的表现是一样的,可以用incr或者使用Redis的事务,或者使用Redis+Lua的方式实现。对Redis来说,执行get、set以及eval等API,都是一个一个的任务,这些任务都会由Redis的线程去负责执行,任务要么执行成功,要么执行失败,这就是Redis的命令是原子性的原因。 41题 (1)twemproxy,使用方式简单(相对redis只需修改连接端口),对旧项目扩展的首选。(2)codis,目前用的最多的集群方案,基本和twemproxy一致的效果,但它支持在节点数改变情况下,旧节点数据可恢复到新hash节点。(3)redis cluster3.0自带的集群,特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持节点设置从节点。(4)在业务代码层实现,起几个毫无关联的redis实例,在代码层,对key进行hash计算,然后去对应的redis实例操作数据。这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的代替算法方案,数据震荡后的自动脚本恢复,实例的监控,等等。 40题 (1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件 (2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次 (3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内 (4) 尽量避免在压力很大的主库上增加从库 (5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3...这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。 39题 比如订单管理,热数据:3个月内的订单数据,查询实时性较高;温数据:3个月 ~ 12个月前的订单数据,查询频率不高;冷数据:1年前的订单数据,几乎不会查询,只有偶尔的查询需求。热数据使用mysql进行存储,需要分库分表;温数据可以存储在ES中,利用搜索引擎的特性基本上也可以做到比较快的查询;冷数据可以存放到Hive中。从存储形式来说,一般情况冷数据存储在磁带、光盘,热数据一般存放在SSD中,存取速度快,而温数据可以存放在7200转的硬盘。 38题 当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。降级的最终目的是保证核心服务可用,即使是有损的。而且有些服务是无法降级的(如加入购物车、结算)。 37题 分层架构设计,有一条准则:站点层、服务层要做到无数据无状态,这样才能任意的加节点水平扩展,数据和状态尽量存储到后端的数据存储服务,例如数据库服务或者缓存服务。显然进程内缓存违背了这一原则。 36题 更新数据的时候,根据数据的唯一标识,将操作路由之后,发送到一个 jvm 内部队列中。读取数据的时候,如果发现数据不在缓存中,那么将重新读取数据+更新缓存的操作,根据唯一标识路由之后,也发送同一个 jvm 内部队列中。一个队列对应一个工作线程,每个工作线程串行拿到对应的操作,然后一条一条的执行。 35题 redis分布式锁加锁过程:通过setnx向特定的key写入一个随机值,并同时设置失效时间,写值成功既加锁成功;redis分布式锁解锁过程:匹配随机值,删除redis上的特点key数据,要保证获取数据、判断一致以及删除数据三个操作是原子的,为保证原子性一般使用lua脚本实现;在此基础上进一步优化的话,考虑使用心跳检测对锁的有效期进行续期,同时基于redis的发布订阅优雅的实现阻塞式加锁。 34题 volatile-lru:当内存不足以容纳写入数据时,从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。 volatile-ttl:当内存不足以容纳写入数据时,从已设置过期时间的数据集中挑选将要过期的数据淘汰。 volatile-random:当内存不足以容纳写入数据时,从已设置过期时间的数据集中任意选择数据淘汰。 allkeys-lru:当内存不足以容纳写入数据时,从数据集中挑选最近最少使用的数据淘汰。 allkeys-random:当内存不足以容纳写入数据时,从数据集中任意选择数据淘汰。 noeviction:禁止驱逐数据,当内存使用达到阈值的时候,所有引起申请内存的命令会报错。 33题 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。 32题 缓存击穿,一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。如何避免:在访问key之前,采用SETNX(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key。 31题 缓存雪崩,是指在某一个时间段,缓存集中过期失效。大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。而缓存服务器某个节点宕机或断网,对数据库服务器造成的压力是不可预知的,很有可能瞬间就把数据库压垮。如何避免:1.redis高可用,搭建redis集群。2.限流降级,在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。3.数据预热,在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间。 30题 缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。一些恶意的请求会故意查询不存在的 key,请求量很大,对数据库造成压力,甚至压垮数据库。 如何避免:1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该 key 对应的数据 insert 了之后清理缓存。2:对一定不存在的 key 进行过滤。可以把所有的可能存在的 key 放到一个大的 Bitmap 中,查询时通过该 bitmap 过滤。 29题 1.memcached 所有的值均是简单的字符串,redis 作为其替代者,支持更为丰富的数据类型。 2.redis 的速度比 memcached 快很多。 3.redis 可以持久化其数据。 4.Redis支持数据的备份,即master-slave模式的数据备份。 5.Redis采用VM机制。 6.value大小:redis最大可以达到1GB,而memcache只有1MB。 28题 Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过spring提供的@ImportResource来加载xml配置。例如:@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"}) 27题 Spring像一个大家族,有众多衍生产品例如Spring Boot,Spring Security等等,但他们的基础都是Spring的IOC和AOP,IOC提供了依赖注入的容器,而AOP解决了面向切面的编程,然后在此两者的基础上实现了其他衍生产品的高级功能。Spring MVC是基于Servlet的一个MVC框架,主要解决WEB开发的问题,因为 Spring的配置非常复杂,各种xml,properties处理起来比较繁琐。Spring Boot遵循约定优于配置,极大降低了Spring使用门槛,又有着Spring原本灵活强大的功能。总结:Spring MVC和Spring Boot都属于Spring,Spring MVC是基于Spring的一个MVC框架,而Spring Boot是基于Spring的一套快速开发整合包。 26题 YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。YAML 的配置文件后缀为 .yml,是一种人类可读的数据序列化语言,可以简单表达清单、散列表,标量等数据形态。它通常用于配置文件,与属性文件相比,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。 25题 Spring Boot有3种热部署方式: 1.使用springloaded配置pom.xml文件,使用mvn spring-boot:run启动。 2.使用springloaded本地加载启动,配置jvm参数-javaagent:<jar包地址> -noverify。 3.使用devtools工具包,操作简单,但是每次需要重新部署。 用

游客ih62co2qqq5ww 2020-03-27 23:56:48 0 浏览量 回答数 0

问题

MaxCompute百问集锦

yq传送门 2019-12-01 20:16:47 2404 浏览量 回答数 1

问题

Web测试方法

技术小菜鸟 2019-12-01 21:41:32 7022 浏览量 回答数 1

回答

Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口 令密码等 核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。通过DDMS的File Explorer面板,展开文件浏览树,很明显SharedPreferences数据总是存储在/data/data/<package name>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。 SharedPreferences本身是一 个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中name表示要操作的xml文件名,第二个参数具体如下: Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写。 Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他应用程序读,但不能写。 Context.MODE_WORLD_WRITEABLE: 指定该SharedPreferences数据能被其他应用程序读,写 Editor有如下主要重要方法: SharedPreferences.Editor clear():清空SharedPreferences里所有数据 SharedPreferences.Editor putXxx(String key , xxx value): 向SharedPreferences存入指定key对应的数据,其中xxx 可以是boolean,float,int等各种基本类型据 SharedPreferences.Editor remove(): 删除SharedPreferences中指定key对应的数据项 boolean commit(): 当Editor编辑完成后,使用该方法提交修改 实际案例:运行界面如下 这里只提供了两个按钮和一个输入文本框,布局简单,故在此不给出界面布局文件了,程序核心代码如下: 、class ViewOcl implements View.OnClickListener{ @Override public void onClick(View v) { switch(v.getId()){ case R.id.btnSet: //步骤1:获取输入值 String code = txtCode.getText().toString().trim(); //步骤2-1:创建一个SharedPreferences.Editor接口对象,lock表示要写入的XML文件名,MODE_WORLD_WRITEABLE写操作 SharedPreferences.Editor editor = getSharedPreferences("lock", MODE_WORLD_WRITEABLE).edit(); //步骤2-2:将获取过来的值放入文件 editor.putString("code", code); //步骤3:提交 editor.commit(); Toast.makeText(getApplicationContext(), "口令设置成功", Toast.LENGTH_LONG).show(); break; case R.id.btnGet: //步骤1:创建一个SharedPreferences接口对象 SharedPreferences read = getSharedPreferences("lock", MODE_WORLD_READABLE); //步骤2:获取文件中的值 String value = read.getString("code", ""); Toast.makeText(getApplicationContext(), "口令为:"+value, Toast.LENGTH_LONG).show(); break; } } } 、读写其他应用的SharedPreferences: 步骤如下 1、在创建SharedPreferences时,指定MODE_WORLD_READABLE模式,表明该SharedPreferences数据可以被其他程序读取 2、创建其他应用程序对应的Context: Context pvCount = createPackageContext("com.tony.app", Context.CONTEXT_IGNORE_SECURITY);这里的com.tony.app就是其他程序的包名 3、使用其他程序的Context获取对应的SharedPreferences SharedPreferences read = pvCount.getSharedPreferences("lock", Context.MODE_WORLD_READABLE); 4、如果是写入数据,使用Editor接口即可,所有其他操作均和前面一致。 SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。 第二种: 文件存储数据 核心原理: Context提供了两个方法来打开数据文件里的文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数 用于指定文件名,第二个参数指定打开文件的模式。具体有以下值可选: MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可 以使用Context.MODE_APPEND MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 MODE_WORLD_READABLE:表示当前文件可以被其他应用读取; MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。 除此之外,Context还提供了如下几个重要的方法: getDir(String name , int mode):在应用程序的数据文件夹下获取或者创建name对应的子目录 File getFilesDir():获取该应用程序的数据文件夹得绝对路径 String[] fileList():返回该应用数据文件夹的全部文件 public String read() { try { FileInputStream inStream = this.openFileInput("message.txt"); byte[] buffer = new byte[1024]; int hasRead = 0; StringBuilder sb = new StringBuilder(); while ((hasRead = inStream.read(buffer)) != -1) { sb.append(new String(buffer, 0, hasRead)); } inStream.close(); return sb.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } public void write(String msg){ // 步骤1:获取输入值 if(msg == null) return; try { // 步骤2:创建一个FileOutputStream对象,MODE_APPEND追加模式 FileOutputStream fos = openFileOutput("message.txt", MODE_APPEND); // 步骤3:将获取过来的值放入文件 fos.write(msg.getBytes()); // 步骤4:关闭数据流 fos.close(); } catch (Exception e) { e.printStackTrace(); } } openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data//files目录,如: /data/data/cn.tony.app/files/message.txt, 下面讲解某些特殊文件读写需要注意的地方: 读写sdcard上的文件 其中读写步骤按如下进行: 1、调用Environment的getExternalStorageState()方法判断手机上是否插了sd卡,且应用程序具有读写SD卡的权限,如下代码将返回true Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) 2、调用Environment.getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录,或者使用"/mnt/sdcard/"目录 3、使用IO流操作SD卡上的文件 注意点:手机应该已插入SD卡,对于模拟器而言,可通过mksdcard命令来创建虚拟存储卡 必须在AndroidManifest.xml上配置读写SD卡的权限 // 文件写操作函数 private void write(String content) { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // 如果sdcard存在 File file = new File(Environment.getExternalStorageDirectory() .toString() + File.separator + DIR + File.separator + FILENAME); // 定义File类对象 if (!file.getParentFile().exists()) { // 父文件夹不存在 file.getParentFile().mkdirs(); // 创建文件夹 } PrintStream out = null; // 打印流对象用于输出 try { out = new PrintStream(new FileOutputStream(file, true)); // 追加文件 out.println(content); } catch (Exception e) { e.printStackTrace(); } finally { if (out != null) { out.close(); // 关闭打印流 } } } else { // SDCard不存在,使用Toast提示用户 Toast.makeText(this, "保存失败,SD卡不存在!", Toast.LENGTH_LONG).show(); } } // 文件读操作函数 private String read() { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // 如果sdcard存在 File file = new File(Environment.getExternalStorageDirectory() .toString() + File.separator + DIR + File.separator + FILENAME); // 定义File类对象 if (!file.getParentFile().exists()) { // 父文件夹不存在 file.getParentFile().mkdirs(); // 创建文件夹 } Scanner scan = null; // 扫描输入 StringBuilder sb = new StringBuilder(); try { scan = new Scanner(new FileInputStream(file)); // 实例化Scanner while (scan.hasNext()) { // 循环读取 sb.append(scan.next() + "\n"); // 设置文本 } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } finally { if (scan != null) { scan.close(); // 关闭打印流 } } } else { // SDCard不存在,使用Toast提示用户 Toast.makeText(this, "读取失败,SD卡不存在!", Toast.LENGTH_LONG).show(); } return null; } 复制代码 第三种:SQLite存储数据 SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧 SQLiteDatabase类为我们提供了很多种方法,上面的代码中基本上囊括了大部分的数据库操作;对于添加、更新和删除来说,我们都可以使用 1 db.executeSQL(String sql); 2 db.executeSQL(String sql, Object[] bindArgs);//sql语句中使用占位符,然后第二个参数是实际的参数集 除了统一的形式之外,他们还有各自的操作方法: 1 db.insert(String table, String nullColumnHack, ContentValues values); 2 db.update(String table, Contentvalues values, String whereClause, String whereArgs); 3 db.delete(String table, String whereClause, String whereArgs);以上三个方法的第一个参数都是表示要操作的表名;insert中的第二个参数表示如果插入的数据每一列都为空的话,需要指定此行中某一列的名称,系统将此列设置为NULL,不至于出现错误;insert中的第三个参数是ContentValues类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;update的第二个参数也很类似,只不过它是更新该字段key为最新的value值,第三个参数whereClause表示WHERE表达式,比如“age > ? and age < ?”等,最后的whereArgs参数是占位符的实际参数值;delete方法的参数也是一样 下面给出demo 数据的添加 1.使用insert方法 复制代码1 ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据2 cv.put("title","you are beautiful");//添加title3 cv.put("weather","sun"); //添加weather4 cv.put("context","xxxx"); //添加context5 String publish = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")6 .format(new Date());7 cv.put("publish ",publish); //添加publish8 db.insert("diary",null,cv);//执行插入操作复制代码2.使用execSQL方式来实现 String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL语句db.execSQL(sql);//执行SQL语句数据的删除 同样有2种方式可以实现 String whereClause = "username=?";//删除的条件String[] whereArgs = {"Jack Johnson"};//删除的条件参数db.delete("user",whereClause,whereArgs);//执行删除使用execSQL方式的实现 String sql = "delete from user where username='Jack Johnson'";//删除操作的SQL语句db.execSQL(sql);//执行删除操作数据修改 同上,仍是2种方式 ContentValues cv = new ContentValues();//实例化ContentValuescv.put("password","iHatePopMusic");//添加要更改的字段及内容String whereClause = "username=?";//修改条件String[] whereArgs = {"Jack Johnson"};//修改条件的参数db.update("user",cv,whereClause,whereArgs);//执行修改使用execSQL方式的实现 String sql = "update user set password = 'iHatePopMusic' where username='Jack Johnson'";//修改的SQL语句db.execSQL(sql);//执行修改数据查询 下面来说说查询操作。查询操作相对于上面的几种操作要复杂些,因为我们经常要面对着各种各样的查询条件,所以系统也考虑到这种复杂性,为我们提供了较为丰富的查询形式: 1 db.rawQuery(String sql, String[] selectionArgs); 2 db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy); 3 db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); 4 db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); 上面几种都是常用的查询方法,第一种最为简单,将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数,selectionArgs就是占位符实际参数集; 各参数说明: table:表名称colums:表示要查询的列所有名称集selection:表示WHERE之后的条件语句,可以使用占位符selectionArgs:条件语句的参数数组groupBy:指定分组的列名having:指定分组条件,配合groupBy使用orderBy:y指定排序的列名limit:指定分页参数distinct:指定“true”或“false”表示要不要过滤重复值Cursor:返回值,相当于结果集ResultSet最后,他们同时返回一个Cursor对象,代表数据集的游标,有点类似于JavaSE中的ResultSet。下面是Cursor对象的常用方法: 复制代码 1 c.move(int offset); //以当前位置为参考,移动到指定行 2 c.moveToFirst(); //移动到第一行 3 c.moveToLast(); //移动到最后一行 4 c.moveToPosition(int position); //移动到指定行 5 c.moveToPrevious(); //移动到前一行 6 c.moveToNext(); //移动到下一行 7 c.isFirst(); //是否指向第一条 8 c.isLast(); //是否指向最后一条 9 c.isBeforeFirst(); //是否指向第一条之前 10 c.isAfterLast(); //是否指向最后一条之后 11 c.isNull(int columnIndex); //指定列是否为空(列基数为0) 12 c.isClosed(); //游标是否已关闭 13 c.getCount(); //总数据项数 14 c.getPosition(); //返回当前游标所指向的行数 15 c.getColumnIndex(String columnName);//返回某列名对应的列索引值 16 c.getString(int columnIndex); //返回当前行指定列的值 复制代码实现代码 复制代码String[] params = {12345,123456};Cursor cursor = db.query("user",columns,"ID=?",params,null,null,null);//查询并获得游标if(cursor.moveToFirst()){//判断游标是否为空 for(int i=0;i<cursor.getCount();i++){ cursor.move(i);//移动到指定记录 String username = cursor.getString(cursor.getColumnIndex("username"); String password = cursor.getString(cursor.getColumnIndex("password")); } }复制代码通过rawQuery实现的带参数查询 复制代码Cursor result=db.rawQuery("SELECT ID, name, inventory FROM mytable");//Cursor c = db.rawQuery("s name, inventory FROM mytable where ID=?",new Stirng[]{"123456"}); result.moveToFirst(); while (!result.isAfterLast()) { int id=result.getInt(0); String name=result.getString(1); int inventory=result.getInt(2); // do something useful with these result.moveToNext(); } result.close();复制代码 在上面的代码示例中,已经用到了这几个常用方法中的一些,关于更多的信息,大家可以参考官方文档中的说明。 最后当我们完成了对数据库的操作后,记得调用SQLiteDatabase的close()方法释放数据库连接,否则容易出现SQLiteException。 上面就是SQLite的基本应用,但在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法。 这里直接使用案例讲解:下面是案例demo的界面 SQLiteOpenHelper类介绍 SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。 方法名 方法描述SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) 构造方法,其中 context 程序上下文环境 即:XXXActivity.this; name :数据库名字; factory:游标工厂,默认为null,即为使用默认工厂; version 数据库版本号 onCreate(SQLiteDatabase db) 创建数据库时调用onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) 版本更新时调用getReadableDatabase() 创建或打开一个只读数据库getWritableDatabase() 创建或打开一个读写数据库首先创建数据库类 复制代码 1 import android.content.Context; 2 import android.database.sqlite.SQLiteDatabase; 3 import android.database.sqlite.SQLiteDatabase.CursorFactory; 4 import android.database.sqlite.SQLiteOpenHelper; 5 6 public class SqliteDBHelper extends SQLiteOpenHelper { 7 8 // 步骤1:设置常数参量 9 private static final String DATABASE_NAME = "diary_db";10 private static final int VERSION = 1;11 private static final String TABLE_NAME = "diary";12 13 // 步骤2:重载构造方法14 public SqliteDBHelper(Context context) {15 super(context, DATABASE_NAME, null, VERSION);16 }17 18 /*19 * 参数介绍:context 程序上下文环境 即:XXXActivity.this 20 * name 数据库名字 21 * factory 接收数据,一般情况为null22 * version 数据库版本号23 */24 public SqliteDBHelper(Context context, String name, CursorFactory factory,25 int version) {26 super(context, name, factory, version);27 }28 //数据库第一次被创建时,onCreate()会被调用29 @Override30 public void onCreate(SQLiteDatabase db) {31 // 步骤3:数据库表的创建32 String strSQL = "create table "33 + TABLE_NAME34 + "(tid integer primary key autoincrement,title varchar(20),weather varchar(10),context text,publish date)";35 //步骤4:使用参数db,创建对象36 db.execSQL(strSQL);37 }38 //数据库版本变化时,会调用onUpgrade()39 @Override40 public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {41 42 }43 }复制代码正如上面所述,数据库第一次创建时onCreate方法会被调用,我们可以执行创建表的语句,当系统发现版本变化之后,会调用onUpgrade方法,我们可以执行修改表结构等语句。 我们需要一个Dao,来封装我们所有的业务方法,代码如下: 复制代码 1 import android.content.Context; 2 import android.database.Cursor; 3 import android.database.sqlite.SQLiteDatabase; 4 5 import com.chinasoft.dbhelper.SqliteDBHelper; 6 7 public class DiaryDao { 8 9 private SqliteDBHelper sqliteDBHelper;10 private SQLiteDatabase db;11 12 // 重写构造方法13 public DiaryDao(Context context) {14 this.sqliteDBHelper = new SqliteDBHelper(context);15 db = sqliteDBHelper.getWritableDatabase();16 }17 18 // 读操作19 public String execQuery(final String strSQL) {20 try {21 System.out.println("strSQL>" + strSQL);22 // Cursor相当于JDBC中的ResultSet23 Cursor cursor = db.rawQuery(strSQL, null);24 // 始终让cursor指向数据库表的第1行记录25 cursor.moveToFirst();26 // 定义一个StringBuffer的对象,用于动态拼接字符串27 StringBuffer sb = new StringBuffer();28 // 循环游标,如果不是最后一项记录29 while (!cursor.isAfterLast()) {30 sb.append(cursor.getInt(0) + "/" + cursor.getString(1) + "/"31 + cursor.getString(2) + "/" + cursor.getString(3) + "/"32 + cursor.getString(4)+"#");33 //cursor游标移动34 cursor.moveToNext();35 }36 db.close();37 return sb.deleteCharAt(sb.length()-1).toString();38 } catch (RuntimeException e) {39 e.printStackTrace();40 return null;41 }42 43 }44 45 // 写操作46 public boolean execOther(final String strSQL) {47 db.beginTransaction(); //开始事务48 try {49 System.out.println("strSQL" + strSQL);50 db.execSQL(strSQL);51 db.setTransactionSuccessful(); //设置事务成功完成 52 db.close();53 return true;54 } catch (RuntimeException e) {55 e.printStackTrace();56 return false;57 }finally { 58 db.endTransaction(); //结束事务 59 } 60 61 }62 }复制代码我们在Dao构造方法中实例化sqliteDBHelper并获取一个SQLiteDatabase对象,作为整个应用的数据库实例;在增删改信息时,我们采用了事务处理,确保数据完整性;最后要注意释放数据库资源db.close(),这一个步骤在我们整个应用关闭时执行,这个环节容易被忘记,所以朋友们要注意。 我们获取数据库实例时使用了getWritableDatabase()方法,也许朋友们会有疑问,在getWritableDatabase()和getReadableDatabase()中,你为什么选择前者作为整个应用的数据库实例呢?在这里我想和大家着重分析一下这一点。 我们来看一下SQLiteOpenHelper中的getReadableDatabase()方法: 复制代码 1 public synchronized SQLiteDatabase getReadableDatabase() { 2 if (mDatabase != null && mDatabase.isOpen()) { 3 // 如果发现mDatabase不为空并且已经打开则直接返回 4 return mDatabase; 5 } 6 7 if (mIsInitializing) { 8 // 如果正在初始化则抛出异常 9 throw new IllegalStateException("getReadableDatabase called recursively"); 10 } 11 12 // 开始实例化数据库mDatabase 13 14 try { 15 // 注意这里是调用了getWritableDatabase()方法 16 return getWritableDatabase(); 17 } catch (SQLiteException e) { 18 if (mName == null) 19 throw e; // Can't open a temp database read-only! 20 Log.e(TAG, "Couldn't open " + mName + " for writing (will try read-only):", e); 21 } 22 23 // 如果无法以可读写模式打开数据库 则以只读方式打开 24 25 SQLiteDatabase db = null; 26 try { 27 mIsInitializing = true; 28 String path = mContext.getDatabasePath(mName).getPath();// 获取数据库路径 29 // 以只读方式打开数据库 30 db = SQLiteDatabase.openDatabase(path, mFactory, SQLiteDatabase.OPEN_READONLY); 31 if (db.getVersion() != mNewVersion) { 32 throw new SQLiteException("Can't upgrade read-only database from version " + db.getVersion() + " to " 33 + mNewVersion + ": " + path); 34 } 35 36 onOpen(db); 37 Log.w(TAG, "Opened " + mName + " in read-only mode"); 38 mDatabase = db;// 为mDatabase指定新打开的数据库 39 return mDatabase;// 返回打开的数据库 40 } finally { 41 mIsInitializing = false; 42 if (db != null && db != mDatabase) 43 db.close(); 44 } 45 }复制代码在getReadableDatabase()方法中,首先判断是否已存在数据库实例并且是打开状态,如果是,则直接返回该实例,否则试图获取一个可读写模式的数据库实例,如果遇到磁盘空间已满等情况获取失败的话,再以只读模式打开数据库,获取数据库实例并返回,然后为mDatabase赋值为最新打开的数据库实例。既然有可能调用到getWritableDatabase()方法,我们就要看一下了: 复制代码public synchronized SQLiteDatabase getWritableDatabase() { if (mDatabase != null && mDatabase.isOpen() && !mDatabase.isReadOnly()) { // 如果mDatabase不为空已打开并且不是只读模式 则返回该实例 return mDatabase; } if (mIsInitializing) { throw new IllegalStateException("getWritableDatabase called recursively"); } // If we have a read-only database open, someone could be using it // (though they shouldn't), which would cause a lock to be held on // the file, and our attempts to open the database read-write would // fail waiting for the file lock. To prevent that, we acquire the // lock on the read-only database, which shuts out other users. boolean success = false; SQLiteDatabase db = null; // 如果mDatabase不为空则加锁 阻止其他的操作 if (mDatabase != null) mDatabase.lock(); try { mIsInitializing = true; if (mName == null) { db = SQLiteDatabase.create(null); } else { // 打开或创建数据库 db = mContext.openOrCreateDatabase(mName, 0, mFactory); } // 获取数据库版本(如果刚创建的数据库,版本为0) int version = db.getVersion(); // 比较版本(我们代码中的版本mNewVersion为1) if (version != mNewVersion) { db.beginTransaction();// 开始事务 try { if (version == 0) { // 执行我们的onCreate方法 onCreate(db); } else { // 如果我们应用升级了mNewVersion为2,而原版本为1则执行onUpgrade方法 onUpgrade(db, version, mNewVersion); } db.setVersion(mNewVersion);// 设置最新版本 db.setTransactionSuccessful();// 设置事务成功 } finally { db.endTransaction();// 结束事务 } } onOpen(db); success = true; return db;// 返回可读写模式的数据库实例 } finally { mIsInitializing = false; if (success) { // 打开成功 if (mDatabase != null) { // 如果mDatabase有值则先关闭 try { mDatabase.close(); } catch (Exception e) { } mDatabase.unlock();// 解锁 } mDatabase = db;// 赋值给mDatabase } else { // 打开失败的情况:解锁、关闭 if (mDatabase != null) mDatabase.unlock(); if (db != null) db.close(); } } }复制代码大家可以看到,几个关键步骤是,首先判断mDatabase如果不为空已打开并不是只读模式则直接返回,否则如果mDatabase不为空则加锁,然后开始打开或创建数据库,比较版本,根据版本号来调用相应的方法,为数据库设置新版本号,最后释放旧的不为空的mDatabase并解锁,把新打开的数据库实例赋予mDatabase,并返回最新实例。 看完上面的过程之后,大家或许就清楚了许多,如果不是在遇到磁盘空间已满等情况,getReadableDatabase()一般都会返回和getWritableDatabase()一样的数据库实例,所以我们在DBManager构造方法中使用getWritableDatabase()获取整个应用所使用的数据库实例是可行的。当然如果你真的担心这种情况会发生,那么你可以先用getWritableDatabase()获取数据实例,如果遇到异常,再试图用getReadableDatabase()获取实例,当然这个时候你获取的实例只能读不能写了 最后,让我们看一下如何使用这些数据操作方法来显示数据,界面核心逻辑代码: 复制代码public class SQLiteActivity extends Activity { public DiaryDao diaryDao; //因为getWritableDatabase内部调用了mContext.openOrCreateDatabase(mName, 0, mFactory); //所以要确保context已初始化,我们可以把实例化Dao的步骤放在Activity的onCreate里 @Override protected void onCreate(Bundle savedInstanceState) { diaryDao = new DiaryDao(SQLiteActivity.this); initDatabase(); } class ViewOcl implements View.OnClickListener { @Override public void onClick(View v) { String strSQL; boolean flag; String message; switch (v.getId()) { case R.id.btnAdd: String title = txtTitle.getText().toString().trim(); String weather = txtWeather.getText().toString().trim();; String context = txtContext.getText().toString().trim();; String publish = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(new Date()); // 动态组件SQL语句 strSQL = "insert into diary values(null,'" + title + "','" + weather + "','" + context + "','" + publish + "')"; flag = diaryDao.execOther(strSQL); //返回信息 message = flag?"添加成功":"添加失败"; Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); break; case R.id.btnDelete: strSQL = "delete from diary where tid = 1"; flag = diaryDao.execOther(strSQL); //返回信息 message = flag?"删除成功":"删除失败"; Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); break; case R.id.btnQuery: strSQL = "select * from diary order by publish desc"; String data = diaryDao.execQuery(strSQL); Toast.makeText(getApplicationContext(), data, Toast.LENGTH_LONG).show(); break; case R.id.btnUpdate: strSQL = "update diary set title = '测试标题1-1' where tid = 1"; flag = diaryDao.execOther(strSQL); //返回信息 message = flag?"更新成功":"更新失败"; Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); break; } } } private void initDatabase() { // 创建数据库对象 SqliteDBHelper sqliteDBHelper = new SqliteDBHelper(SQLiteActivity.this); sqliteDBHelper.getWritableDatabase(); System.out.println("数据库创建成功"); } }复制代码 Android sqlite3数据库管理工具 Android SDK的tools目录下提供了一个sqlite3.exe工具,这是一个简单的sqlite数据库管理工具。开发者可以方便的使用其对sqlite数据库进行命令行的操作。 程序运行生成的.db文件一般位于"/data/data/项目名(包括所处包名)/databases/.db",因此要对数据库文件进行操作需要先找到数据库文件: 1、进入shell 命令 adb shell2、找到数据库文件 cd data/data ls --列出所有项目 cd project_name --进入所需项目名 cd databases ls --列出现寸的数据库文件 3、进入数据库 sqlite3 test_db --进入所需数据库 会出现类似如下字样: SQLite version 3.6.22Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite>至此,可对数据库进行sql操作。 4、sqlite常用命令 .databases --产看当前数据库.tables --查看当前数据库中的表.help --sqlite3帮助.schema --各个表的生成语句 原文地址https://www.cnblogs.com/ITtangtang/p/3920916.html

auto_answer 2019-12-02 01:50:21 0 浏览量 回答数 0

问题

SSH面试题

琴瑟 2019-12-01 21:46:22 3489 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站