存在的记忆 - mysql高可用
type: channel
link: https://www.looaon.com/index.php/tag/mysql高可用/
items: aws主从同步，从库无法创建表
items: AWS RDS +EC2实例主从
items: 局域网中搭建共享MySQL数据库
items: 亚马逊rds同步到本地
items: mysql同步项目
items: 使用mysqldump从AWS RDS迁移MySQL到阿里云RDS
items: AWS RDS迁移MySQL到阿里云RDS

aws主从同步，从库无法创建表
type: item
date: 2018-10-27T15:06:00+08:00
description: 事故重点mysql replication 中slave机器上有两个关键的进程，死一个都不行，一个是slave_sql_running，一个是Slave_IO_Running，一个负责与主机的io通信，一个负责自己的slave mysql进程。下面写一下，这两个要是有no了，怎么恢复。。如果是slave_io_running no了，那么就我个人看有三种情况，一个是网络有问题，连接不上，像有一次我用虚拟机搭建replication，使用了nat的网络结构，就是死都连不上，第二个是有可能my.cnf有问题，配置文件怎么写就不说了，网上太多了，最后一个是授权的问题，replication slave和file权限是必须的。如果不怕死就all咯。。 一旦io为no了先看err日志，看看爆什么错，很可能是网络，也有可能是包太大收不了，这个时候主备上改max_allowed_packet这个参数。 如果是slave_sql_running no了，那么也有两种可能，一种是slave机器上这个表中出现了其他的写操作，就是程序写了，这个是会有问题的，今天我想重现，但是有时候会有问题，有时候就没有问题，现在还不是太明了，后面再更新，还有一种占绝大多数可能的是slave进程重启，事务回滚造成的，这也是mysql的一种自我保护的措施，像关键时候只读一样。 这个时候想恢复的话，只要停掉slave，set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;再开一下slave就可以了，这个全局变量赋值为N的意思是：This statement skips the next N events from the master. This is useful for recovering from replication stops caused by a statement. This statement is valid only when the slave thread is not running. Otherwise, it produces an error. 呵呵，讲的比我清楚。MYSQL镜像服务器因错误停止的恢复下午主服务器，由于一些原因，导致死机，重启后，发现从服务器的数据没有跟上。 配好MYSQL主从也才前几天的事，没多少经验，第一次碰上这问题，有点焦急。不过，自己试了下，还算解决了：） 从服务器上Master_Log_File: mysqlhxmaster.000007 Read_Master_Log_Pos: 84285377 看一下主服务器：mysqlhxmaster.000007 | 84450528 | 已经过后很多了，确实没跟上。show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: No 有问题了，Slave_SQL_Running应该是Yes才对。 再往下看，有错误的提示：Last_Errno: 1053 Last_Error: Query partially completed on the master (error on master: 1053) and was aborted. There is a chance that your master is inconsistent at this point. If you are sure that your master is ok, run this query manually on the slave and then restart the slave with SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; . Query: 'INSERT INTO hx_stat_record ......(一句SQL语句)' 这里有说明要怎么操作了：） 先stop slave，然后执行了一下提示的语句，再SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes OK了，从服务器也在几分钟内把堆积的log处理完了，两边又同步了：) 从MYSQL服务器Slave_IO_Running: No的解决2 早晨机房意外断电，导致了发现mysql从服务器同步异常。使用以前碰到的Slave_SQL_Running为No的解决办法无效，仍然无法同步。查看一下状态：show slave status Master_Log_File: mysqlmaster.000079 Read_M…

AWS RDS +EC2实例主从
type: item
date: 2018-10-26T00:33:00+08:00
description: 2018-10-26 01:07:32近期业务需要想要把mysql从RDS迁移至EC2。由于主库业务不能有任何问题，不确定的情况下不修改主库基础参数，在EC2上重做从库。1，申请一个配置有多可用区的测试实例：giikin-test.civxfbosrcnl.ap-southeast-1.rds.amazonaws.com2，授权复制帐号和测试帐号（sysbench做测试）GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'117.160.%' IDENTIFIED BY 'repl'; grant select,create,index,insert,update,delete,drop on *.* to gktest@'117.160.%' identified by 'giikin'; #使其立刻生效 flush privileges; 3，得到主库上的binlog位置>show master status\G *************************** 1. row *************************** File: mysql-bin-changelog.000023 Position: 5768524 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.01 sec) 4，在EC2准备一台从库，指定好主从关系>CHANGE MASTER TO MASTER_HOST='giikin-test.civxfbosrcnl.ap-southeast-1.rds.amazonaws.com', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin-changelog.000023', MASTER_LOG_POS=5768524, MASTER_USER='repl', MASTER_PASSWORD='repl'; Query OK, 0 rows affected, 2 warnings (0.02 sec) >start slave; Query OK, 0 rows affected (0.00 sec) >show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: giikin-test.civxfbosrcnl.ap-southeast-1.rds.amazonaws.com Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin-changelog.000023 Read_Master_Log_Pos: 5768524 Relay_Log_File: relay-log.000002 Relay_Log_Pos: 293 Relay_Master_Log_File: mysql-bin-changelog.000023 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: mysql Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: mysql.% Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 5768524 Relay_Log_Space: 460 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Re…

局域网中搭建共享MySQL数据库
type: item
date: 2018-10-10T16:29:00+08:00
description: 局域网中搭建共享MySQL数据库比较适合学习阶段的同学，适合搭建平台进行测试，也方便共同管理数据库，但是还是有较大的弊端，本文的讲解方法只能在局域网中进行搭建。一、配置单个电脑访问共享数据库需要注意的是：几台电脑的ip地址需要在同一个段 安装的有MySQL服务navicat客户端软件不强制，只是建议grant select,delete,update,insert on db_test.* to 'root'@'192.168.1.2' identified by '123456';1 说明：db_test是共享数据库的名称root就是root用户123456是数据库的密码IP地址是需要访问本机数据库的电脑IP地址二、配置所有电脑访问共享数据库Grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;1 %表示是所有的外部机器如果还未生效，则重启MySQL服务器，或运行下面这句mysql> flush privileges; 1 局域网中搭建共享MySQL数据库完成！

亚马逊rds同步到本地
type: item
date: 2018-09-25T16:58:00+08:00
description: 业务需要将亚马逊rds同步到本地，实现增量备份，测试过程中遇到的几点问题，记录一下失败原因1：源库binlog没有开启，增量迁移无法拉取事务日志输入查询命令，确认log_bin=onshow variables like "%bin%"; 解决方案调用命令show global variables like 'log_bin'; 确认log_bin=on。在源实例，更改my.cnf,设置log_bin，并重启MySQL后重新进行预检查失败原因2：源库binlog format 不是row解决方案：在源库执行：set global binlog_format=ROW 后重新进行预检查。建议重启MySQL，否则连接中的session可能以非ROW模式继续写入失败原因3：如果源库是Mysql5.6,binlog_row_image必须为FULL模式解决方案：在源库中，执行set global binlog_row_image=FULL 命令,设置binlog_row_image为FULL失败原因4：目标库存在跟待迁移对象同名的结构对象（库重复了，可以暂时忽略）gwms.nr_stock_freeze--->nr_stock_freeze.nr_stock_freeze 解决方案：（三选一）（1）修改待迁移对象在目标库的名称，使用迁移列表选择的重命名功能 （2）删除或重命名目标库的对象 （3）暂时不迁移该同名对象删除触发器！！！！！SELECT * FROM information_schema.`TRIGGERS` drop trigger triggers_name drop trigger tri_stock;

mysql同步项目
type: item
date: 2018-09-25T16:48:00+08:00
description: 检测项 检测内容 检测结果 源库连接性检查 检查数据传输服务器是否能连通源数据库 成功 源库连接性检查 检查数据传输服务器是否能连通源数据库 成功 源库权限检查 检查源数据库的账号权限是否满足迁移要求 成功 目的库连接性检查 检查数据传输服务器是否能连通目的数据库 成功 目的库连接性检查 检查数据传输服务器是否能连通目的数据库 成功 目的库权限检查 检查目的数据库的账号权限是否满足迁移要求 成功 源库binlog开启检查 检查源数据库是否开启binlog 源库binlog模式检查 检查源数据库的binlog模式是否合法 源库binlog_row_image是否为FULL 如果源库是Mysql5.6,binlog_row_image必须为FULL模式 源库server_id检查 检查源数据库是否设置server_id大于1 源库binlog存在性检查 检查源数据库的binlog是否被删除 存储引擎检查 检查迁移表是否有不支持的存储引擎 MySQL密码格式检查 检查MySQL是否使用老的密码格式 源库版本检查 检查源数据库的版本号 同名对象存在性检查 检查目的库是否存在跟待迁移对象同名的结构对象 数据库可用性检查 检查目的数据库待迁入的数据库是否可用 不同名账号存在性检查 检查是否有同一实例使用不同的用户名 复杂拓扑存在性检查 检查源跟目标RDS实例上是否存在不支持的同步拓扑

使用mysqldump从AWS RDS迁移MySQL到阿里云RDS
type: item
date: 2018-09-17T18:50:00+08:00
description: 适用场景本文适用于使用mysqldump工具从AWS RDS迁移MySQL到阿里云RDS。环境准备已创建AWS RDS MySQL 5.6 或更低版本。 已创建阿里云RDS MySQL 5.6实例，数据库可用空间大小要有AWS RDS显示的数据大小的2倍以上（是因为导入数据库时产生的Binlog，后续会自动清理掉的）。 一台装有MySQL Client 5.6的Linux或Windows机器。 操作步骤设置 AWS RDS 使用外网地址访问，操作步骤如下所示： 打开AWS RDS Console, 进入要迁移实例的Dashboard页面。记下group id (红框部分)，然后在页面左边单击Security Groups。在Security Group页面选择相应的group，红框部分对应第一步的group id。选择Inboud选项卡，单击Edit按钮。在弹出对话框中，Type下拉列表中选择MySQL，Source下拉列表中选择Anywhere，单击Save按钮。从Linux机器上检查一下是否可以连接。连接命令格式如下所示：mysql –h <连接地址> -P <端口> -u <用户名> -p <密码> <数据库名> 检查结果如下图所示：创建阿里云RDS帐号，操作步骤如下所示：登录 RDS 管理控制台，选择目标实例。 选择菜单中的账号管理，单击创建账号，如下图所示。输入要创建的账号信息，单击确定，如下图所示。 数据库账号：由2~16个字符的小写字母，数字或下划线组成、开头需为字母，结尾需为字母或数字。 密码：该账号对应的密码，由6~32个字符的字母、数字、中划线或下划线组成。 确认密码：输入与密码一致的字段，以确保密码正确输入。 备注说明：可以备注该账号的相关信息，便于后续账号管理，最多支持256个字符（1个汉字等于2个字符）。 创建阿里云RDS数据库，操作步骤如下所示：选择菜单中的数据库管理，单击创建数据库，如下图所示。输入要创建的数据库信息，单击确定，如下图所示。 数据库(DB)名称：由2~64个字符的小写字母、数字、下划线或中划线组成，开头需为字母，结尾需为字母或数字。 支持字符集：设置数据库的字符集：utf8、gbk、latin1和utf8mb4。 授权账号：选择该数据库授权的账号。如果尚未创建账号，该值可以为空。 账号类型：选择授权账号后可见，设置该数据库授权给授权账的权限，可以设置为读写或者只读。 备注说明：可以备注该数据库的相关信息，便于后续数据库管理，最多支持256个字符（1个汉字等于2个字符）。使用mysqldump进行正式的数据迁移。具体迁移时间依赖于数据量大小。迁移命令格式如下所示：mysqldump –h <AWS RDS地址> -P <端口> -u <用户名> –p <密码> <数据库名> --single-transaction --routines --triggers --compress --compact | mysqldump –h<阿里云RDS地址> -u<用户名> –p<密码> <数据库名> 注意:这种方法可能会受到网络抖动或断开的影响。 远程到Linux的SSH session要保持不能断开，建议在screen里面运行能够保持session。

AWS RDS迁移MySQL到阿里云RDS
type: item
date: 2018-09-17T18:19:00+08:00
description: 适用场景本文适用于使用阿里云自带数据迁移产品DTS从AWS RDS迁移MySQL到阿里云RDS。环境准备已创建AWS RDS MySQL 5.6 或更低版本。 已创建阿里云RDS MySQL 5.6实例，数据库可用空间大小要有AWS RDS显示的数据大小的2倍以上（因为导入数据库时产生的Binlog，后续会自动清理掉的）。 操作步骤1、 设置 AWS RDS 使用外网地址访问，操作步骤如下所示： a.打开AWS RDS Console, 进入要迁移实例的Dashboard页面。记下group id (红框部分)，然后在页面左边单击Security Groups。b.在Security Group页面选择相应的group，红框部分对应第一步的group id。选择Inboud选项卡，单击Edit按钮。c.在弹出对话框中，Type下拉列表中选择MySQL，Source下拉列表中选择Anywhere，单击Save按钮。d.获取数据库IP地址，回到AWS RDS实例页面，选取并复制数据库地址(Endpoint)。2、创建阿里云RDS帐号，操作步骤如下所示：a.登录 RDS 管理控制台，选择目标实例。 b.选择菜单中的账号管理，单击创建账号，如下图所示。c.输入要创建的账号信息，单击确定，如下图所示。 数据库账号：由2~16个字符的小写字母，数字或下划线组成、开头需为字母，结尾需为字母或数字。 密码：该账号对应的密码，由6~32个字符的字母、数字、中划线或下划线组成。 确认密码：输入与密码一致的字段，以确保密码正确输入。 备注说明：可以备注该账号的相关信息，便于后续账号管理，最多支持256个字符（1个汉字等于2个字符）。 3、创建阿里云RDS数据库，操作步骤如下所示：a.选择菜单中的数据库管理，单击创建数据库，如下图所示。b.输入要创建的数据库信息，单击确定，如下图所示。 数据库(DB)名称：由2~64个字符的小写字母、数字、下划线或中划线组成，开头需为字母，结尾需为字母或数字。 支持字符集：设置数据库的字符集：utf8、gbk、latin1和utf8mb4。 授权账号：选择该数据库授权的账号。如果尚未创建账号，该值可以为空。 账号类型：选择授权账号后可见，设置该数据库授权给授权账的权限，可以设置为读写或者只读。 备注说明：可以备注该数据库的相关信息，便于后续数据库管理，最多支持256个字符（1个汉字等于2个字符）。 4、使用DTS进行数据迁移，操作步骤如下所示：a.打开DTS控制台，单击数据迁移页签，如下图所示：b.单击创建迁移任务，进入任务配置页面，填写源库信息和目标库信息，如下图所示。源库连接信息：源库实例类型选择有公网IP的自建数据库，填写对应的源库连接信息。 目标库连接信息：目标实例类型选择RDS实例，填写对应的目标库链接信息。c.选择要迁移的对象列表，以及迁移的类型，如下图所示：说明： 如果源库应用在迁移过程中有更新，那么可以选择进行增量数据迁移。在左边的迁移对象框中，选择需要迁移的对象，并拖动到右边的选择框中。 如果用户的阿里云RDS上的数据库同AWS上的库名不一致，或者需要修改表名，那么可以在右边已选择对象中单击编辑进行修改。如下图所示： 单击编辑按钮，进入编辑页面，可以将数据库名修改成目标库数据库的库名。如下图所示：d.单击保存，保存之后单击预检查并启动，进入任务预检查。如下图所示：e.当预检查成功后，单击启动，任务即启动，可以在任务列表查看任务进度状态。如下图所示：说明：当增量迁移无延迟时，AWS和阿里云RDS上面的数据一致，可以停止迁移任务。 注意：由于AWS会尽最快的速度回收binlog，而增量迁移依赖源库的binlog日志，所以为了防止未被增量同步的binlog日志被清除掉。可以调用AWS RDS的存储过程mysql.rds_set_configurations来设置binlog的保存时间。例如将保存时间延长至一天，调用这个存储过程的命令为： call mysql.rds_set_configuration('binlog retention hours', 72);查询call mysql.rds_show_configuration;