MySQL之Haproxy+Keepalived+MySQL高可用均衡负载部署 (网络摘抄)

来源于:https://blog.csdn.net/weisong530624687/article/details/71536837?utm_source=blogxgwz3

一、安装主从MySQL

1. 按照Linux-rpm安装MySQL步骤完成MySQL安装;

2. 修改启动的配置文件

(1)复制/usr/share/mysql路径下的my-default.cnf文件或my-medium.cnf文件至/etc目录

(2)修改配置文件:

server-id = 91   #指定服务器ID

thread_concurrency = 4 #

log-bin = mysql-bin    #开启二进制日志

skip-name-resolve

binlog-ignore = mysql   #忽略mysql和information_schema

binlog-ignore = information_schema

binlog-do_db = integrator_db #同步的数据库名,不配置此项则默认同步所有数据库

(3)在Master服务器上创建MySQL用户(授权复制用户)

命令:grant replication slave on *.* to '用户名'@'slave IP地址' identified by '密码';

(4)查看master状态

命令:show master status;

(5)同步骤(2)修改slave的配置文件,其中server-id要设置比master大

(6)在slave添加master配置

命令:change master to

->master_host='master主机IP',

->master_port='master mysql服务使用端口',

->master_user='master mysql远程用户名',

->master_password='master mysql远程密码',

->master_log_file='master二进制日志文件',    #show master status中File的值

->master_log_pos='master日志地址';         show master status中Position的值

(7)主从同步测试

命令:show slave status\G

当Slave_IO_Running和Slave_SQL_Running均为Yes时,表示同步成功。

二、安装Haproxy

master和slave安装配置步骤相同。

1、上传安装包、授权并解压;

命令:chmod 755 安装包名称;

tar -zxvf 安装包名称;

如本次使用haproxy-1.4.8.tar.gz安装包。

2、编译、安装

(1)查看系统内核,选择对应编译命令

查看内核命令:uname -a

(2)编译

如果是32位系统,则命令为:make TARGET=linux26 ARCH=i386 PREFIX=编译路径

如果是64位系统,则命令为:make TARGET=linux26 ARCH=x86_64PREFIX=编译路径

假设本次系统为64位,安装路径为/var/local/haproxy,则命令为:make TARGET=linux26 ARCH=x86_64 PREFIX=/var/local/haproxy

(3)安装

命令:make install PREFIX=编译路径

同步骤(2),命令为:make install PREFIX=/var/local/haproxy

3、创建配置文件、日志目录

命令:mkdir -p /var/local/haproxy/logs/var/local/haproxy/conf  /var/local/haproxy/sbin

4、编辑配置文件

命令:vim /var/local/haproxy/conf/haproxy.conf,配置文件内容:

global

log         127.0.0.1 local2

chroot      /var/lib/haproxy

pidfile     /var/run/haproxy.pid

maxconn     4096

user        haproxy

group       haproxy

daemon

# turn on stats unix socket

stats socket /var/lib/haproxy/stats

defaults

mode                    http

log                     global

option                  tcplog

option                  dontlognull

option                  redispatch

retries                 3

timeout queue           1m

timeout connect         10s

timeout client          1m

timeout server          1m

timeout check           10s

maxconn                 4096

listen mysql_proxy

bind 0.0.0.0:3307

mode tcp

balance  source

option mysql-check user root password 111111    #远程用户

server mysqldb1 192.168.0.91:3306 weight 1  check  inter 1s rise 2 fall 2        #master mysql

server mysqldb2 192.168.0.121:3306 weight 2  check  inter 1s rise 2 fall 2 backup         #slave mysql

listen stats     #监控

mode http

bind 0.0.0.0:8888

stats enable

stats uri /dbs

stats realm Global\ statistics

stats auth admin:admin

配置文件说明同均衡负载-haproxy配置文件说明

5、haproxy启动脚本管理

命令:vi /etc/init.d/haproxy,增加配置:

#!/bin/bash

#

# chkconfig: 2345 85 15

# description: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited \

#              for high availability environments.

# processname: haproxy

# config: /etc/haproxy.cfg

# pidfile: /var/run/haproxy.pid

# Source function library.

if [ -f /etc/init.d/functions ]; then

. /etc/init.d/functions

elif [ -f /etc/rc.d/init.d/functions ] ; then

. /etc/rc.d/init.d/functions

else

exit 0

fi

CONF_FILE="/etc/haproxy/haproxy.cfg"

HAPROXY_BINARY="/usr/local/sbin/haproxy"

PID_FILE="/var/run/haproxy.pid"

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -f ${CONF_FILE} ] || exit 1

RETVAL=0

start() {

$HAPROXY_BINARY -c -q -f $CONF_FILE

if [ $? -ne 0 ]; then

echo "Errors found in configuration file."

return 1

fi

echo -n "Starting HAproxy: "

daemon $HAPROXY_BINARY -D -f $CONF_FILE -p $PID_FILE

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/haproxy

return $RETVAL

}

stop() {

echo -n "Shutting down HAproxy: "

killproc haproxy -USR1

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/haproxy

[ $RETVAL -eq 0 ] && rm -f $PID_FILE

return $RETVAL

}

restart() {

$HAPROXY_BINARY -c -q -f $CONF_FILE

if [ $? -ne 0 ]; then

echo "Errors found in configuration file, check it with 'haproxy check'."

return 1

fi

stop

start

}

check() {

$HAPROXY_BINARY -c -q -V -f $CONF_FILE

}

rhstatus() {

pid=$(pidof haproxy)

if [ -z "$pid" ]; then

echo "HAProxy is stopped."

exit 3

fi

status haproxy

}

condrestart() {

[ -e /var/lock/subsys/haproxy ] && restart || :

}

# See how we were called.

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

reload)

restart

;;

condrestart)

condrestart

;;

status)

rhstatus

;;

check)

check

;;

*)

echo $"Usage: haproxy {start|stop|restart|reload|condrestart|status|check}"

RETVAL=1

esac

exit $RETVAL

6 、开启系统日志文件支持

(1)修改/etc/syslog.conf,命令:vim /etc/syslog.conf ,添加内容:

local2.*   /var/local/haproxy/logs/haproxy.log     #注意:local数字 该值与haproxy.conf中的配置保持一致

(2)修改/etc/sysconfig/syslog,命令:vim/etc/sysconfig/rsyslog,添加内容:

SYSLOGD_OPTIONS=”-c 2 -r -m 0″          #注释:-c 2 使用兼容模式,默认是 -c 5,-r开启远程日志,-m 0标记时间戳。单位是分钟,为0时,表示禁用该功能

(3)重启rsyslog服务,命令:/etc/init.d/rsyslog restart

(4)重启haproxy服务,命令:haproxy -f /var/haproxy/conf/haproxy.con

7、可打开网页查看haproxy监控mysql的情况

URL:http://haproxy服务器地址:端口/路径

如步骤4配置的URL地址为:http://192.168.0.121:8888/dbs,用户名/密码均为admin

具体安装步骤可参考:http://www.poluoluo.com/server/201601/450417.html

http://www.tuicool.com/articles/67ZFBr

三、Keepalived安装配置

1、上传安装包、授权并解压;

命令:chmod 755 安装包名称;

tar  -zxvf 安装包名称;

如本次使用keepalived-1.2.12.tar.gz安装包。

2、编译、安装

命令:./configure

make& make install

3、准备配置文件

命令: cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/sbin/keepalived /usr/sbin/

4、修改配置文件

(1)master配置文件:

global_defs {
    notification_email {
        mona.lai@sinoservices.com   //receiver email
   }
   notification_email_fromkobe.lv@sinoservices.com   //sender email
   smtp_server smtp.sinoservices.com
   smtp_connect_timeout 30
   router_id Mysql_Breakdown_Notification  #the master and backup must have the same router id
}
 
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 56  
    priority 101
    advert_int 1
    authentication {  
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.101
    }
}
 
virtual_server 192.168.0.101 3307 {
     delay_loop 2   
     lb_algo wrr   
     lb_kind DR    
     persistence_timeout 60
     protocol TCP
     real_server 192.168.0.91 3307 {
     weight 3
     notify_down /opt/chk_haproxy.sh
     TCP_CHECK {
     connect_timeout 10    
     nb_get_retry 3      
     delay_before_retry 3   
     connect_port 3307
    }
  }
}

vrrp_script chk_http_port {
    script "/opt/chk_haproxy.sh"
    interval 2
    weight 2
}

track_script {
    chk_http_port
}

(2)backup配置文件

global_defs {
    notification_email {
        mona.lai@sinoservices.com   //receiver email
   }
   notification_email_fromkobe.lv@sinoservices.com   //sender email
   smtp_server smtp.sinoservices.com
   smtp_connect_timeout 30
   router_id Mysql_Breakdown_Notification  #the master and backup must have the same router id
}
 
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 56  
    priority 99
    advert_int 1
    authentication {  
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.101
    }
}
 
virtual_server 192.168.0.101 3307 {
     delay_loop 2   
     lb_algo wrr   
     lb_kind DR    
     persistence_timeout 60
     protocol TCP
     real_server 192.168.0.91 3307 {
     weight 3
     notify_down /opt/chk_haproxy.sh
     TCP_CHECK {
     connect_timeout 10    
     nb_get_retry 3      
     delay_before_retry 3   
     connect_port 3307
    }
  }
}

vrrp_script chk_http_port {
    script "/opt/chk_haproxy.sh"
    interval 2
    weight 2
}

track_script {
    chk_http_port
}

5、启动keepalived

先后在主、从服务器上启动keepalived:,命令:/etc/init.d/keepalived start
在主服务器上查看是否已经绑定了虚拟IP,命令: ip addr

6、设置脚本,让keepalive监控haproxy的状态

监控脚本:

#!/bin/bash

if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then

haproxy -f /etc/haproxy/haproxy.cfg

fi

sleep 3

if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then

/etc/init.d/keepalived stop

fi

7、测试无误后,重启MySQL、Haproxy、Keepalived,顺序依次为MySQL、Haproxy、Keepalived

启动命令:service mysql restart

killall -9 haproxy   -> haproxy -f /var/haproxy/conf/haproxy.con

/etc/init.d/keepalived restart

四、MySQL双主(主主)架构方案

在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动。因此,如果是双主或者多主,就会增加mysql入口,增加高可用。不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶,总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题。

主从同步复制原理

在开始之前,我们先来了解主从同步复制原理。

复制分成三步:

1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);

2. slave将master的binary log events拷贝到它的中继日志(relay log);

3. slave重做中继日志中的事件,将改变反映它自己的数据。

下图描述了这一过程:

该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。

SQL slave thread处理该过程的最后一步。SQL线程从中继日志读取事件,更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。

MySQL5.6以前的版本复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。MySQL5.6版本参数slave-parallel-workers=1表示启用多线程功能。

MySQL5.6开始,增加了一个新特性,是加入了全局事务ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力。

官方文档:http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html

MySQL双主(主主)架构方案思路是:

1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;

2.masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;

3.两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务);

4.所有提供服务的从服务器与masterB进行主从同步(双主多从);

5.建议采用高可用策略的时候,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式);

这样做可以在一定程度上保证主库的高可用,在一台主库down掉之后,可以在极短的时间内切换到另一台主库上(尽可能减少主库宕机对业务造成的影响),减少了主从同步给线上主库带来的压力;

但是也有几个不足的地方:

1.masterB可能会一直处于空闲状态(可以用它当从库,负责部分查询);

2.主库后面提供服务的从库要等masterB先同步完了数据后才能去masterB上去同步数据,这样可能会造成一定程度的同步延时;

架构的简易图如下:

主主环境(这里只介绍2台主的配置方案):

1.CentOS 6.8 64位2台:masterA(192.168.10.11),masterB(192.168.10.12)

2.官方Mysql5.6版本

搭建过程:

1.安装MySQL服务(建议源码安装)

1.1 yum安装依赖包

yum -yinstall make gcc gcc-c++  ncurses-devel bison openssl-devel

1.2 添加MySQL所需要的用户和组

groupadd -g 27 mysql

adduser -u 27 -g mysql -s /sbin/nologin mysql

1.3 下载MySQL源码包

mkdir -p /data/packages/src

cd /data/packages/wget http://distfiles.macports.org/cmake/cmake-3.2.3.tar.gzwget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.34.tar.gz

1.4 创建mysql数据目录

mkdir -p /usr/local/mysql/data

1.5 解压编译安装cmake、MySQL

cd /data/packages/srctar -zxvf ../cmake-3.2.3.tar.gz

cd cmake-3.2.3/

./bootstrap

gmakemake install

cd ../tar xf  mysql-5.6.34.tar.gz

cd mysql-5.6.34

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc \-DWITH_SSL=bundled -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci \-DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 \-DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \-DMYSQL_DATADIR=/usr/local/mysql/datamake &&make install

1.6 添加开机启动脚本

cp support-files/mysql.server /etc/rc.d/init.d/mysqld

1.7 添加masterA配置文件/etc/my.cnf

[client]

port = 3306

socket = /tmp/mysql.sock

[mysqld]

basedir = /usr/local/mysql

port = 3306

socket = /tmp/mysql.sock

datadir = /usr/local/mysql/data

pid-file = /usr/local/mysql/data/mysql.pid

log-error = /usr/local/mysql/data/mysql.err

server-id = 1

auto_increment_offset = 1

auto_increment_increment = 2                                            #奇数ID

log-bin = mysql-bin                                                     #打开二进制功能,MASTER主服务器必须打开此项

binlog-format=ROW

binlog-row-p_w_picpath=minimal

log-slave-updates=true

gtid-mode=on

enforce-gtid-consistency=true

master-info-repository=TABLE

relay-log-info-repository=TABLEsync-master-info=1

slave-parallel-workers=0

sync_binlog=0

binlog-checksum=CRC32

master-verify-checksum=1

slave-sql-verify-checksum=1

binlog-rows-query-log_events=1

#expire_logs_days=5

max_binlog_size=1024M                                                   #binlog单文件最大值

replicate-ignore-db = mysql                                             #忽略不同步主从的数据库

replicate-ignore-db = information_schema

replicate-ignore-db = performance_schema

replicate-ignore-db = test

replicate-ignore-db = zabbix

max_connections = 3000

max_connect_errors = 30

skip-character-set-client-handshake                                     #忽略应用程序想要设置的其他字符集

init-connect='SET NAMES utf8'                                           #连接时执行的SQL

character-set-server=utf8                                               #服务端默认字符集

wait_timeout=1800                                                       #请求的最大连接时间

interactive_timeout=1800                                                #和上一参数同时修改才会生效

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES                     #sql模式

max_allowed_packet = 10M

bulk_insert_buffer_size = 8M

query_cache_type = 1

query_cache_size = 128M

query_cache_limit = 4M

key_buffer_size = 256M

read_buffer_size = 16K

skip-name-resolve

slow_query_log=1

long_query_time = 6

slow_query_log_file=slow-query.log

innodb_flush_log_at_trx_commit = 2

innodb_log_buffer_size = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 20M

sort_buffer_size = 20M

read_buffer = 2M

write_buffer = 2M

[mysqlhotcopy]

interactive-timeout

[mysqldump]

quick

max_allowed_packet = 16M

[mysqld_safe]

1.8 特别参数说明

log-slave-updates = true     #将复制事件写入binlog,一台服务器既做主库又做从库此选项必须要开启

#masterA自增长ID

auto_increment_offset = 1

auto_increment_increment = 2                                            #奇数ID

#masterB自增加ID

auto_increment_offset = 2

auto_increment_increment = 2                                            #偶数ID

1.9 添加masterB配置文件/etc/my.cnf

[client]

port = 3306

socket = /tmp/mysql.sock

[mysqld]

basedir = /usr/local/mysql

port = 3306

socket = /tmp/mysql.sock

datadir = /usr/local/mysql/data

pid-file = /usr/local/mysql/data/mysql.pid

log-error = /usr/local/mysql/data/mysql.err

server-id = 2

auto_increment_offset = 2

auto_increment_increment = 2                                            #偶数ID

log-bin = mysql-bin                                                     #打开二进制功能,MASTER主服务器必须打开此项

binlog-format=ROW

binlog-row-p_w_picpath=minimal

log-slave-updates=true

gtid-mode=on

enforce-gtid-consistency=true

master-info-repository=TABLE

relay-log-info-repository=TABLEsync-master-info=1

slave-parallel-workers=0

sync_binlog=0

binlog-checksum=CRC32

master-verify-checksum=1

slave-sql-verify-checksum=1

binlog-rows-query-log_events=1

#expire_logs_days=5

max_binlog_size=1024M                                                   #binlog单文件最大值

replicate-ignore-db = mysql                                             #忽略不同步主从的数据库

replicate-ignore-db = information_schema

replicate-ignore-db = performance_schema

replicate-ignore-db = test

replicate-ignore-db = zabbix

max_connections = 3000

max_connect_errors = 30

skip-character-set-client-handshake                                     #忽略应用程序想要设置的其他字符集

init-connect='SET NAMES utf8'                                           #连接时执行的SQL

character-set-server=utf8                                               #服务端默认字符集

wait_timeout=1800                                                       #请求的最大连接时间

interactive_timeout=1800                                                #和上一参数同时修改才会生效

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES                     #sql模式

max_allowed_packet = 10M

bulk_insert_buffer_size = 8M

query_cache_type = 1

query_cache_size = 128M

query_cache_limit = 4M

key_buffer_size = 256M

read_buffer_size = 16K

skip-name-resolve

slow_query_log=1

long_query_time = 6

slow_query_log_file=slow-query.log

innodb_flush_log_at_trx_commit = 2

innodb_log_buffer_size = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 20M

sort_buffer_size = 20M

read_buffer = 2M

write_buffer = 2M

[mysqlhotcopy]

interactive-timeout

[mysqldump]

quick

max_allowed_packet = 16M

[mysqld_safe]

1.10 初始化MySQL

cd /usr/local/mysql

scripts/mysql_install_db --user=mysql

1.11 为启动脚本赋予可执行权限并启动MySQL

chmod +x /etc/rc.d/init.d/mysqld/etc/init.d/mysqld start

2.配置主从同步

2.1 添加主从同步账户

masterA上:

mysql> grant replication slaveon *.* to 'repl'@'192.168.10.12' identifiedby '123456';

mysql> flushprivileges;

masterB上:

mysql> grant replication slaveon *.* to 'repl'@'192.168.10.11' identifiedby '123456';

mysql> flushprivileges;

2.2 查看主库的状态

masterA上:

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position| Binlog_Do_DB| Binlog_Ignore_DB| Executed_Gtid_Set|

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000003 |      120 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 rowin set (0.00 sec)

masterB上

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position| Binlog_Do_DB| Binlog_Ignore_DB| Executed_Gtid_Set|

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000003 |      437 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 rowin set (0.00 sec)

2.3 配置同步信息:

masterA上:

mysql> change masterto master_host='192.168.10.12',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=437;

mysql> start slave;

mysql> show slave status\G;

显示有如下状态则正常:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

masterB上:

#本人是测试环境,可以保证没数据写入,否则需要的步骤是:先masterA锁表-->masterA备份数据-->masterA解锁表-->masterB导入数据-->masterB设置主从-->查看主从

mysql> change masterto master_host='192.168.10.11',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=120;

start slave;

mysql> show slave status\G;

显示有如下状态则正常:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

3.测试主从同步

3.1 在masterA上创建一个数据库测试同步效果

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema|

| mysql              |

| performance_schema|

| test               |

+--------------------+

4 rowsin set (0.00 sec)

mysql> create database test01;

Query OK, 1 row affected (0.00 sec)

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema|

| mysql              |

| performance_schema|

| test               |

| test01             |

+--------------------+

5 rowsin set (0.00 sec)

mysql> quit

Bye

[root@masterA data]#

3.2 到masterB查看是否已经同步创建数据库

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema|

| mysql              |

| performance_schema|

| test               |

| test01             |

+--------------------+

5 rowsin set (0.00 sec)

mysql> quit

Bye

[root@masterB data]#

4.开启MySQL5.6的GTID功能

masterA和masterB分别执行如下命令:

mysql> stop slave;

Query OK, 0 rows affected (0.00 sec)

mysql> change masterto MASTER_AUTO_POSITION=1;

Query OK, 0 rows affected (0.01 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

5.遇到的问题

一种主从报错折腾了我半天:

Last_IO_Errno: 1236

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not open log file'

后面修改主从同步相关参数,确认原因是my.cnf增加了如下参数:

log-bin = mysql-bin

relay-log = mysql-bin

从正常主主同步时的二进制日志文件显示,有2套二进制日志。因此推断上面2个参数导致不能产生2套二进制文件,故导致二进制文件错乱和丢失。

五、附录:

MySQL忘记了root密码,使用skip-grant-tables方式启动后,用set password的方式修改root密码时遇到错误

ERROR 1290 (HY000)

1.以skip-grant-tables方式启动mysql

C:\Users\>mysqld --skip-grant-tables
130411 10:09:30 [Warning] '--default-character-set' is deprecated and will be removed in a future re
lease. Please use '--character-set-server' instead.
130411 10:09:30 [Warning] Changed limits: max_open_files: 2048  max_connections: 700  table_cache: 6
69

2.用root用户登录,不用输入密码

C:\Users\>mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.54-community-log MySQL Community Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

3.用set password方式修改root密码遇到错误ERROR 1290 (HY000)

mysql> set password for root@'localhost'=PASSWORD('12345');
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot exe
cute this statement

4. 用update方式修改root密码正常
mysql> update mysql.user set password=password('12345') where user='root' and host='localhost';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

5.刷新权限

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

看来以skip-grant-tables方式启动mysql后,不能用set password的方式修改root密码

上一篇:JavaScript一个猜数字游戏


下一篇:【原】Infragistics.Win.UltraWinGrid.UltraGrid 增加行号