当前位置: 首页 > 编程日记 > 正文

Hadoop集群搭建(七:MySQL的安装配置)

实验

目的

要求

目的:

1、掌握MySQL在集群平台中的安装

要求:

  1. 完成MySQL的集群版的安装;
  2. MySQL集群的相关服务进程能够正常启动;
  3. MySQL集群的SQL服务能够作为系统服务开机自动启动;
  4. MySQL客户端能够远程连接MySQL集群的SQL服务;
  5. MySQL集群的SQL服务能够远程链接访问;
  6. 创建表、查询数据等数据库操作能够正常进行;
  7. MySQL集群的数据库数据能够在多个SQL服务节点之间实现同步;

  1. 五台独立PC式虚拟机;
  2. 主机之间有有效的网络连接;
  3. 每台主机内存2G以上,磁盘50G;
  4. 所有主机上安装CentOS7-64位操作系统;
  5. 所有主机已完成静态网络地址、主机名、主机地址映射的配置;

软件版本:

选用MySQL Cluster的7.5.7版本,软件包选择Linux的通用包Generic,软件包名mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64.tar.gz;

依赖软件:

MySQL Cluster的安装和使用需要依赖与软件libaio,选用该软件的0.3.109版本,软件包名libaio-0.3.109-13.el7.x86_64.rpm;

集群规划:

* MySQL数据库的集群版本有管理节点、 数据服务节点、 SQL服务节点总共3类服务节点, 集群中要求至少一台单独的主机作为管理节点, 而集群模式需要满足数据有备份和数据处理能够分布并行的基本要求, 所以需要两台或以上的主机作为数据服务节点以及两台或以上的主机作为SQL服务节点, 具体规划如下:

主机名

IP地址

服务描述

Cluster-01

192.168.10.111

MC管理节点

Cluster-02

192.168.10.112

MC数据服务节点

Cluster-03

192.168.10.113

MC数据服务节点

Cluster-04

192.168.10.114

MC SQL服务节点

Cluster-05

192.168.10.115

MC SQL服务节点

实验内容

步骤一:MySQL集群版安装环境配置

注:1、MySQL集群版安装过程的所有操作步骤都需要使用root用户进行;

       2、此项步骤需要在集群中所有主机上进行;

1、首先,MySQL相关软件包上传到root用户家目录的新建“setups”目录下。

命令:

#mkdir setups

2、匹配MySQL关键字查询包,列出本机yum方式安装的MySQL软件,并卸载删除已安装的MySQL;

命令:

#rpm -qa | grep mysql

#yum list installed | grep mysql

#rpm -e –nodeps 软件包名

#yum -y remove mysql

3、匹配MariaDB关键字查询包,列出本机yum方式安装的MariaDB软件,并卸载删除已安装的MariaDB;

命令:

#rpm -qa | grep mariadb

#rpm -e –nodeps 软件包名

#rpm -qa | grep libaio

#yum list installed | grep libaio

#rpm -ivh 软件包名

4、检查MySQL用户组是否存在,若不存在则创建MySQL用户组;

命令:

#cat /etc/group | grep mysql

#groupadd mysql

5、检查MySQL用户是否存在,若不存在则创建MySQL用户并加入到MySQL用户组中;

命令:

#cat /etc/passwd | grep mysql

#useradd -r -g mysql mysql

6、查看前系统中SELinux服务的运行状态,需要进行永久关闭;

命令:

#sestatus -v

#vi /etc/selinux/config

找到配置项“SELINUX”所在行,将其改为以下内容:

SELINUX=disable

#reboot       //重启主机

步骤二:MySQL集群版基本安装配置;

注:以下步骤需要在集群中所有主机上进行操作;

1、MySQL Cluster软件包“mysql-cluster-gpl-7.5.7- linux-glibc2.12-x86_64.tar.gz”我们一提前上传与用户家目录的“setups”目录下;

命令:

#mkdir /mysql

#cd /mysql

#tar -xzf ~/setups/ mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64.tar.gz

2、进入系统的“/usr/local”目录,在该目录下创建一个名为“MySQL”的连接指向MySQL Cluster所在的目录,MySQL源路径以MySQL Cluster软件包实际解压包的路径为准。

命令:

#cd /usr/local

#ln -s /mysql/ mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64mysql

3、进入连接的MySQL目录,创建存放MySQL数据库数据的目录,更改该数据目录的权限设置

命令:

#cd mysql

#mkdir data

#chmod 770 data

4、更改当前“MySQL”目录的所属用户和所属组

命令:

#chown -R mysql

#chgrp -R mysql

5、配置MySQL相关的环境变量,修改系统的配置文件;

命令:

#vi /etc/profile

在文件末尾添加以下内容:

#mysql-cluster environment

MYSQL_CLUSTER_HOME=/usr/local/mysql

PATH=$MYSQL_CLUSTER_HOME/bin:$PATH

Export MYSQL_CLUSTER_HOME PATH

6、使新配置的环境变量立即生效,并查看环境变量是否生效;

命令:

#source /etc/profile

#echo $MYSQL_CLUSTER_HOME

#echo $PATH

步骤三:配置管理节点Cluster-01;

注:该项的所有操作需要在集群中所有管理节点主机上进行操作。

1、进入MySQL Cluster软件所在目录,创建存放MySQL Cluster数据目录;

命令:

#cd /usr/local/mysql

#mkdir mysql-cluster

2、更改“mysql-cluster”目录的所属用户和所属组;

命令:

#chown -R mysql mysql-cluster

#chgrp -R mysql mysql-cluster

  1. 创建用于存放MySQL Cluster管理节点配置文件的目录,创建MySQL Cluster管理节点的配置文件,并对配置文件进行修改;

命令:

#mkdir etc

#cd stc

#touch config.ini

#vi config.ini

在文件中添加如下内容:

[NDB_MGMD DEFAULT]DataDir=/usr/local/mysql/data[NDBD DEFAULT]NoOfReplicas=2DataMemory=512MIndexMemory=32MDataDir=/usr/local/mysql/data[NDB_MGMD]NodeId=1HostName=Cluster-01[NDBD]NodeId=2HostName=Cluster-02[NDBD]NodeId=3HostName=Cluster-03[NDBD]NodeId=4HostName=Cluster-04[NDBD]NodeId=5HostName=Cluster-05

4、更改当前“etc”目录的所属用户和所属组,并启动MySQL Cluster的管理节点;

注:*首次启动或修改之后启动需要添加参数“--initial”,正常启动时不需要添加参数“--initial”

命令:

#chown -R mysql .

#chgrp -R mysql .

#ndb_mgmd -f /usr/local/mysql/etc/config.ini –initial

5、查看系统进程信息,若存在信息中包含“ndb_mgmd”关键字的进程则表示MySQL Cluster的管理节点启动成功,进入MySQL Cluster管理节点的控制台,查看节点状况;

命令:

#ps -ef | grep ndb_mgmd

#ndb_mgm

>show

>exit

步骤四:配置数据服务节点Cluster-02、Cluster-03;

注:*以下步骤需要在集群中所有数据服务节点主机上进行操作。

1、进入系统配置文件所在目录,创建MySQL Cluster数据服务节点的配置文件,并对配置文件进行修改;

命令:

#cd /etc

#touch my.conf

#vi my.conf

在其中添加如下内容:

[MYSQLD]ndbclusterndb-connectstring=Cluster-01[MYSQL_CLUSTER]ndb-connectstring=Cluster-01

2、启动数据服务节点,查看系统进程信息,若存在信息中包含“ndbd”关键字的进程则表示MySQL Cluster的数据服务节点启动成功,并进入MySQL Cluster管理节点的控制台。

命令:

#ndbd –initial

#ps =ef | grep ndbd

#ndb_mgm

>show

>exit

步骤五:配置SQL服务节点Cluster-04、Cluster-05;

注:*以下步骤需要在集群中所有SQL服务节点主机上进行操作

1、进入系统配置文件所在目录,创建MySQL Cluster数据服务节点的配置文件,并对配置文件进行修改;

命令:

#cd /etc

#touch my.cnf

#vi my.cnf

在其中添加如下内容:

2、对MySQL数据库的安装进行初始化,执行该命令后会有一些提示信息,特别注意最后一行的“[Note]”相关信息,信息内容如下:

[Note] A temporary password is generated for

root@localhost:XXXXXXXXXXXXXX

信息末尾的 “XXXXXXXXXXXXXX”是安装程序随机生成的初始密码, 在首次以root用户登录数据库时雷要使用,非常重要 一定要记下;

命令:

# mysql-initialize –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data

3、将MySQL加入到系统的可控制启动服务目录内,并将服务命名为“MySQL”,启动SQL服务节点,查看系统进程信息,若存在信息中包含“ndbd”关键字的进程则表示MySQL Cluster的数据服务节点启动成功;

命令:

#cp /usr/local/mysql/support-files/mysql.server/etc/init.d/mysql

#service mysql start

#ps -ef | grep mysql

4、进入MySQL Cluster管理节点的控制台;

命令:

#ndb_mgm

>show

>sxit

注意:只有本步骤的验证实在集群中管理节点主机上进行操作,之后的操作仍然是在SQL服务节点主机继续操作;

5、登录MySQL数据库,会提示输入密码,该密码为之前进行安装初始化时所显示的初始化密码,然后进入MySQL的控制台;

命令:

#mysql -u root -p

5.1、在控制台使用命令“SET PASSEORD=PASSWORD(‘mysqlabc’);”,重新设置数据库的“root”用户的登录密码,其中“mysqlabc”部分为自定义的新密码。

5.2、在MySQL控制台使用命令“USE mysql;” 切换到 “mysql” 数据库。

5.3、在MySQL控制台使用命令“UPDATE user SET host='%' WHERE user='root'” , 修改数据库的root用户所接收请求来源的范围。 允许远程登录。

5.4、使用命令“select host from user where user=root”查看数据库的host信息6、使新配置的环境变量立即生效,并查看环境变量是否生效;

5.5、在MySQL控制台使用命令“FLUSH PRIVILEGES”,刷新数据库的权限信息使新配置的权限生效。

5.6、在MySQL控制台使用命令 "exit”可以退出,MySQL控制台返回到系统命令行界面。

6、启添加系统防火墙的端口策略, 对外开启MySQL所使用的端口“3306”,并重启系统防火墙服务,使新添加的端口策略生效;

命令:

#firewall-cmd --zone=public --add-port=3306/tep --permanent

#firewall-cmd--reload

步骤六:MySQL集群版验证;

1、在任意一台SQL服务 节点主机 上使用命令“mysql-u root -p” 登录到MySQL数据库,会提示输入密码,正确输入密码成功登录MySQL数据库之后会进入MySQL的控制台;

命令:

# mysql -u root -P

2、在MySQL控制台使用命令“CREATEDATABASE  test;"创建数据库“test”;

命令:

>CREATE DATABASE test;

3、在MySQL控制台使用命令“SHOW DATABASES;"显示数据库列表,若存在名为“test”的数据库,则表示集群同步数据成功;

命令:

> SHOW DATABASES

注:可以使用命令"ssh   目标主机名或IP地址”远程登录到集群中其它SQU服务节点主机进行操作,完成所有操作后使用命令"logout"退出当前登录

4、在任意一台集群主机上执行;

命令:

#ndb_mgm -e show

步骤七:MySQL集群测试;

1、测试一:

a)现在我们在其中一个SQL节点上进行相关数据库的创建然后到另外一 个SQL节点上看看数据是否同步。

在SQL节点1.上执行:

shell> /usr/local/mysql/bin/mysql -u root -P

mysql>show databases;mysql>create database aa;

mysql>use aa;

mysql>CREATE TABLE ctest2 Gi INT) ENGINE=NDB;

//这里必须指定数据库表的引擎为NDB,否则同步失败

mysql> INSERT INTO ctest2 O VALUES (1);

mysql> SEL ECT * FROM ctest2;

b)然后在SQL节点2上看数据是否同步过来了

经过测试,在非master.上创建数据,可以同步到master上查看表的引擎是不是NDB,>show create table表名:

2、测试二:

a) 关闭一个数据节点,在另外一个节点写输入,开启关闭的节点,看数据是否同步过来。

首先把数据节点1重启,然后在节点2上添加数据

在SQL节点2上操作如下:

mysql> create database bb;

mysql> use bb;

mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;

mysql> use aa;

mysql> INSERT INTO ctest2 O VALUES (3333);

mysql> SELECT* FROM ctest2;

b) 等数据节点1启动完毕,启动数据节点1的服务

#/usr/local/mysql/bin/ndbd -initial

#service mysqld start

c) 然后登录进去查看数据

# /ustrlocal/mysql/bin/mysql -u root p

可以看到数据已经同步过来了,说明数据可以双向同步了。

出现的问题与解决方案

本实验未遇到错误,介绍几个排错技巧:

1、一般,报错的时候都会有error code。比如ERROR 1504,Error: 2303等等,遇到这些报错,我们可以先用mysql的报错工具perror查看,比如查看报错号为1504的错误,使用命令为: perror --ndb 1504

2、在出现报错以后,查看WARNINGS或ERRORS信息,比如出现Error CODE : 1528 Failed TO CREATE LOGFILE GROUP后输入SHOW WARNINGS;,会显示出具体的报错信息:

  Got error 1504 'Out of logbuffer memory' FROM NDB

  Failed TO CREATE LOGFILE GROUP

以上报错代码,均可在官网找到解决方案。

知识拓展

1、MySQL集群优缺点;

优点:

a) 99.999%的高可用性

b)快速的自动失效切换

c)灵活的分布式体系结构,没有单点故障

d)高吞吐量和低延迟

e)可扩展性强,支持在线扩容

缺点:

a)存在很多限制,比如:不支持外键

b)部署、管理、配置很复杂

c)占用磁盘空间大,内存大

d)备份和恢复不方便

e)重启的时候,数据节点将数据load到内存需要很长时间

2、MySQL集群如何存储数据;

a)Master执行提交语句时,事务被发送到slave,slave开始准备事务的提交。

b)每个slave都要准备事务,然后向master发送OK(或ABORT)消息,表明事务已经准备好(或者无法准备该事务)。

c)Master等待所有Slave发送OK或ABORT消息

  • 如果Master收到所有 Slave的OK消息,它就会向所有Slave发送提交消息,告诉Slave提交该事务;
  • 如果Master收到来自任何一个Slave的ABORT消息,它就向所有 Slave发送ABORT消息,告诉Slave去中止事务。

e)每个Slave等待来自Master的OK或ABORT消息。

  • 如果Slave收到提交请求,它们就会提交事务,并向Master发送事务已提交 的确认;
  • 如果Slave收到取消请求,它们就会撤销所有改变并释放所占有的资源,从而中止事务,然后向Masterv送事务已中止的确认。

f)当Master收到来自所有Slave的确认后,就会报告该事务被提交(或中止),然后继续进行下一个事务处理。

3、使用SQLyog连接MySQL集群192.168.10.114或者192.168.10.115

相关文章:

如何在VMware虚拟机上安装Linux操作系统(Ubuntu)

作为初学者想变为计算机大牛非一朝一夕,但掌握基本的计算机操作和常识却也不是多么难的事情。所以作为一名工科男,为了把握住接近女神的机会,也为了避免当白痴,学会装系统吧!of course为避免把自己的电脑作为牺牲品&am…

cf #363 b

B. One Bombtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given a description of a depot. It is a rectangular checkered field of n  m size. Each cell in a field can be empty (".") or…

swift-video-generator:图片加音频生成视频及多视频合并库及演示

阅读 80收藏 92017-11-07原文链接:github.com腾讯云学生优惠套餐,985高校学习云计算的主力机型,2G2核,1M带宽系统盘(Linux 50G/Windows 50G)免费赠送50GB对象存储空间还有.cn域名一年使用权!不要…

Hadoop集群搭建(八:Hive的安装配置)

实验 目的 要求 目的: (1)掌握数据仓库工具Hive的安装和配置; 要求: 完成Hive工具的安装和配置;Hive工具能够正常启动运行;Hive控制台命令能够正常使用;能够正常操作数据库、表、…

iOS 富文本编辑工厂, 让书写更简便.

由于最近常用富文本, 在编辑一个富文本时需要操作很多的属性, 书写起来很不方便. 所以我将这些相关属性整理并使用链式方式将它简化了一下. 效果请看下面Demo. 项目工程 实现很简单, 我嘴太笨, 这里就不介绍了, 如有兴趣直接看源码吧. 同时可以通过cocoapods来使用它. pod SJAt…

ORACLE 数据的逻辑组成

数据块(block)Oracle数据块(Data Block)是一组连续的操作系统块。分配数据库块大小是在Oracle数据库创建时设置的,数据块是Oracle读写的基本单位。数据块的大小一般是操作系统块大小的整数倍,这样可以避免不…

Java 的zip压缩和解压缩

Java 的zip压缩和解压缩好久没有来这写东西了,今天中秋节,有个东西想拿出来分享,一来是工作中遇到的问题,一来是和csdn问候一下,下面就分享一个Java中的zip压缩技术,代码实现比较简单,代码如下:…

Hadoop集群搭建(九:各服务的启动)

1、查看Zookeeper服务状态,若集群中只有一个"leader"节点, 其余的均为"follower"节点,则集群的工作状态正常 $zkServer.sh status 2、在集群中所有主机上使用此命令,启动Zookeeper服务 $zkServer.sh start…

iOS 后台下载及管理库

说起下载第一个想起的就是ASI。一年前接手的新项目是核心功能是视频相关业务,在修改和解决视频下载相关的问题的时候让我体会到了ASI的下载的强大。后来新需求需要视频后台下载,使用NSURLSession的时候,更加深刻的体会到了ASI的强大好用。后来…

(转) 使用Speech SDK 5.1文字转音频

下载地址: http://www.microsoft.com/en-us/download/details.aspx?id10121 SeppchSDK51.exe 语音合成引擎 SpeechSDK51LangPack.exe 支持日语和简体中文需要这个支持。 SpeechSDK51MSM.exe 如果要将引擎作为产品的一部分发布需要这个。 Sp5TTintXP.exe XP下Mike和…

IE8下面的line-height的bug

当line-height小于正常值时,超出的部分将被剪裁掉转载于:https://www.cnblogs.com/jsingleegg/p/js_ie8.html

Hadoop集群的基本操作(一:HDFS操作及MapReduce程序练习)

实验 目的 要求 目的: 理解HDFS在Hadoop体系结构中的角色;熟练使用HDFS操作常用的Shell命令;了解Hadoop集群MapReduce程序的简单使用;(上传WordCount的jar执行程序;使用WordCount进行MapReduce计算&#x…

iOS实现动态区域裁剪图片

阅读 249收藏 322017-11-29原文链接:github.com想自己动手搭建一个 Discuz 论坛?试试腾讯云上实验室吧https://cloud.tencent.com/developer/labs 裁剪图片功能在很多上传图片的场景里都需要用到,一方面应用服务器可能对图片的尺寸大小有限制…

每天CookBook之JavaScript-062

鼠标进入事件鼠标离开事件<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>062</title> </head> <body> <div><img src"001" alt"001"><img src…

spring + Quartz定时任务配置

<bean id"exportBatchFileTask" class"com.ydcn.pts.task.ExportBatchFileTask"></bean><bean id"readBatchFileTask" class"com.ydcn.pts.task.ReadBatchFileResultTask"></bean><!-- 生成开卡档&#xf…

Hadoop集群的基本操作(二:HBase的基本操作)

实验 目的 要求 目的&#xff1a; 1、HBase的基本应用 要求&#xff1a; 完成HBase的高可用完全分布模式的安装&#xff1b;HBase的相关服务进程能够正常的启动&#xff1b;HBase控制台能够正常使用&#xff1b;表创建、数据查询等数据库操作能够正常进行&#xff1b; …

Abaqus用户子程序umat的学习

Abaqus用户子程序umat的学习 说明&#xff1a;在文件中&#xff0c;&#xff01;后面的内容为注释内容。本文为学习心得&#xff0c;很多注释是自己摸索得到。如有不正确的地方&#xff0c;敬请指正。 ! —————————————————————————— ! 1、为何需要…

PHP:isset()-检测变量是否被设置

isset()-检测变量是否被设置 bool isset(mixed $var [, mixed $...])&#xff0c;检查变量是否被设置&#xff0c;并且不是NULL。var,要检测的变量&#xff0c;...其他变量&#xff0c;允许有多个变量。 返回值&#xff1a;如果var存在并且不是NULL&#xff0c;则返回TRUE&…

Android通过ShareSDK实现新浪微博分享

ShareSDK社会化分享的官方说明&#xff1a;是中国最大的APP内分享服务提供商&#xff0c;ShareSDK社会化分享&#xff0c;全面支持微信&#xff0c;微博&#xff0c;QQ空间&#xff0c;来往&#xff0c;易信&#xff0c;Facebook等国内外40个平台。 ShareSDK官方网站&#xff…

Hadoop集群的基本操作(三:HBase的基本操作)

实验 目的 要求 目的&#xff1a; MySQL数据库的基本命令&#xff1b;MySQL数据库中使用SQL语句&#xff1b;MySQL数据库中数据库&#xff0c;表&#xff0c;数据的操作&#xff1b;要求&#xff1a; 完成MySQL的集群版的安装&#xff1b;MySQL集群的相关服务进程能够正常启…

iOS通过Plist保存离线调试日志

最近需要测试APP在iPhone没连接USB情况下定位时间间隔的情况&#xff0c;固把nslog的日志信息保存成本地Plist文件&#xff0c;以便测试结束后查阅运行时的日志。 一、新建一个保存日志的方法&#xff0c;参数为每次定位成功的时间&#xff08;作为key&#xff09;&#xff0c…

关于变量名前面加m的问题

为什么很多人写代码会在变量名前面加一个小写的m&#xff1f; 上大学那会儿就对这个问题感到很好奇。于是网上到处搜&#xff0c;有人说是member的意思。于是后来一直就这么认为。 最近在读Android源码&#xff0c;发现很多系统变量命名时都加了m&#xff0c;而有的变量又没有加…

谷歌推出情境感知API

在 Google I/O 2016 大会上&#xff0c;我们宣布推出新的 Google Awareness API&#xff0c;让您的应用可以利用快照和围栏智能应对用户情境&#xff0c;并且仅需占用极少量的系统资源。 所有开发者均可以通过 Google Play 服务获取 Google Awareness API。 利用 7 种不同类型的…

Hadoop集群的基本操作(四:Hive的基本操作)

实验 目的 要求 目的&#xff1a; &#xff08;1&#xff09;掌握数据仓库工具Hive的使用&#xff1b; 要求&#xff1a; 掌握数据仓库Hive的使用&#xff1b;能够正常操作数据库、表、数据&#xff1b; 实 验 环 境 五台独立PC式虚…

【转】通过Hibernate将数据 存入oracle数据库例子

一、 Hibernate介绍 Hibernate是基于对象/关系映射&#xff08;ORM&#xff0c;Object/Relational Mapping&#xff09;的一个解决方案。ORM方案的思想是将对象模型表示的对象映射到关系型数据库中&#xff0c;或者反之。Hibernate目前是ORM思想在Java中最成功、最强大的实现。…

自动布局按钮排列平均分布

需要实现如下图所示的主页面布局&#xff0c;需要两排按钮&#xff0c;每一排都自动平均分布&#xff0c;Android的话直接用LinearLayout水平布局&#xff0c;并设置layout_weight即可&#xff0c;对于iOS&#xff0c;网上有使用代码实现&#xff0c;感觉略麻烦&#xff0c;我直…

maven3 手动安装本地jar到仓库

安装命令&#xff1a; mvn install:install-file -Dfile{Path/to/your/ojdbc.jar} -DgroupIdcom.oracle -DartifactIdojdbc6 -Dversion11.2.0 -Dpackagingjar我自己安装oracle14.jar 时命令如下&#xff1a;mvn install:install-file -DgroupIdcom.oracle -DartifactIdojdbc14 …

Hadoop集群的基本操作(五:Sqoop的基本操作)

实验 目的 要求 目的&#xff1a; 掌握ETL工具Sqoop的使用&#xff1b;掌握MySQL和HDFS之间的数据转换&#xff1b;要求&#xff1a; 掌握ETL工具Sqoop的使用&#xff1b;能够正常操作数据库、表、数据&#xff1b; 实 验 环 境 五台…

NEWS - InstallShield 2013 SP1发布

2013的这个国庆假期期间&#xff0c;InstallShield厂商Flexerasoftware&#xff08;中文名&#xff1a;福莱睿&#xff09;发布了最新版本InstallShield 2013的SP1&#xff0c;由于这个升级包带来一些新的技术支持和变化&#xff0c;所以特地给大家介绍一下&#xff1a; 1. 支持…

iOS 高德导航按返回后报错 解决

最近项目要添加导航功能&#xff0c;用了高德导航SDK&#xff0c;很郁闷每次从地图界面返回前一页面都报错&#xff0c;弄了很久&#xff0c;最终从高德开发者论坛找到一解决方法&#xff0c;可以试一下。 在导航的ViewController的viewWillDisappear中调用如下方法&#xff0…