mysql主从配置示例

0、基本信息:

win7系统

mysql版本:5.1.47

主mysql数据库ip:192.168.1.229

从mysql数据库ip:192.168.1.119


常用到的语句:

flush tables with read lock;
unlock tables;
show master status;


change master to master_host='192.168.1.229',master_user='sasuke',master_password='sasukeuser',master_port=3306,master_connect_retry=60,master_log_file='mysql-bin.000001',master_log_pos=106;

show slave status;
stop slave;
set global sql_slave_skip_counter=1;
start slave;


mysqlbinlog --start-position="161477356" WIN-CES5DI7KTSN-relay-bin.000005 -d mydatabase>   testsql.sql


1、主mysql数据库设置

(1)、停止mysql服务器,给my.ini文件最后添加如下内容:

注意:my.ini文件一般在mysql的安装目录下(如:C:\Program Files\MySQL\MySQL Server 5.1\ 目录下)

# add by jery in 20160902
server-id = 1                               #主从id需要不一同
log-bin = mysql-bin                  #开始mysql的日志记录功能
binlog-do-db = labg1601        #表示只记录labg1601的日志(多个可以写多个,不写则记录所有数据库的日志)
binlog-ignore-db = mysql     #表示不记录mysql的日志(多个可以写多个,不写则以binlog-do-db配置的为准)

log-slave-updates = 1             #这个参数一定要加上,否则不会给更新的记录些到二进制文件里

slave-skip-errors = 1               #表示是跳过错误,继续执行复制操作

binlog_format = MIXED      #binlog日志格式,mysql默认采用statement,建议使用mixed

【注意:mysql到5.5版本时,默认binlog_format格式是statement,所以主从配置时,mysql主从my.ini都需要配置该选项binlog_format=MIXED,这里binlog_format=MIXED、binlog_format='MIXED'都可以配置成功,命令配置有误引号也可配置成功,如 SET GLOBAL binlog_format=ROW;SET GLOBAL binlog_format=‘ROW’;】

【该配置详情见mysql主从复制模式及遇到的问题_XiaoXiao_RenHe的博客-CSDN博客

(2)、给从服务器开一个可以复制主服务器binlog的用户

在主服务器上,使用root用户登录mysql后,创建用户如:sasuke,密码 sasukeuser

mysql> grant replication slave on  *.* to sasuke@192.168.1.119 identified by 'sasukeuser';

新建一个用户(用户名/密码:sasuke/sasukeuser),赋予该用户复制功能权限(replication slave),且只允许该用户从192.168.1.119上来复制主服务器的信息

具体操作如下图所示:

(3)、备份该主服务上的labg1601数据库为labg1601_20160902.sql

2、从mysql数据库设置

(1)、停止mysql服务器,给my.ini文件最后添加如下内容:

# and by jery in 20160902
server-id = 2                                              #主从数据库id必须不同
log-bin = mysql-bin                                  #开始mysql的日志记录功能
master-host = 192.168.1.229                #表示主数据库的ip
master-user = sasuke                            #表示需要访问主数据库的用户名
master-password = sasukeuser          #表示需要访问主数据库的密码
master-port = 3306                                  #表示主数据库的端口号
master-connect-retry = 60                      #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
replicate-do-db = labg1601                   #表示需要复制主服务器上的数据库是labg1601
replicate-ignore-db = mysql                  #表示不从主服务器上复制的数据库mysql(多个可以写多个,不写则以replicate-do-db配置的为准)

log-slave-updates = 1                            # #这个参数一定要加上,否则不会给更新的记录些到二进制文件里
slave-skip-errors = 1                              # 表示是跳过错误,继续执行复制操作

(2)、从服务器上验证sasuke是否可以连接主数据库,并查看权限信息:

黑窗口中输入> mysql -h 192.168.1.229 -u sasuke -p

                        >*********(这里输入sasukeuser,及sasuke的密码)

连接成功后mysql>show grants for sasuke@192.168.1.119;(查看该用户在主服务器上的权限)

具体操作如下图所示:

(3)、从服务器使用root用户登录,设置从mysql:

    1)、停止从mysql的复制进程(slave进程)(以防万一)

mysql> slave stop;

    2)、设置从mysql复制进程slave的复制文件及复制开始位置

mysql> change master to master_log_file='mysql-bin.000001',master_log_pos=1281;

    3)、启动从mysql的复制进程(slave进程)

mysql> slave start;

    4)、查看从mysql的复制进程(slave进程)

mysql> show slave status\G;

    5)、解锁住库表

mysql > unlock tables;

具体操作见下图:

(4)、给从mysql还原之前在主mysql上备份的数据库labg1601_20160902.sql

3、主从数据变化验证

(1)、主mysql的主mysql的labg1601中v_sys_log表记录删除前:

     1)、主mysql的labg1601中v_sys_log表中记录总数为1030条。

   2)、从mysql的labg1601中v_sys_log表中记录总数为1020条

(2)、主mysql的主mysql的labg1601中v_sys_log表删除三条记录(这三条记录不是从mysql的labg1601中v_sys_log中缺少的那10条记录):

    1)、主mysql的labg1601中v_sys_log表中记录总数为1027条。

 

    2)、主mysql的labg1601中v_sys_log表中记录总数为1017条。

4、已经安装的且配有log-bin的mysql,重启可能报1067错误,解决办法:

将D:\ProgramData\MySQL\MySQL Server 5.1\data(数据存放目录)该目录下mysql-bin.index里面的内容删除后重新启动。

该目录下,ib_logfile0 \ ib_logfile1 \ master.info  均可以删除后,重新启动mysql

另外可能引起问题原因是mysql版本,mysql5.5版本不支持my.ini配置文件设置master-host,master-port,master-user,

master-password参数,且参数log-slave-updates直接被禁用了,mysql5.5可如下设置主库信息

(注意:这里的master_host应调整为192.168.1.229):

change master to master_host='192.168.1.229',master_user='sasuke',master_password='sasukeuser',master_port=3308,master_connect_retry=60,master_log_file='mysql-bin.000002',master_log_pos=107;

change master to master_host='192.168.1.229',master_user='sasuke',master_password='sasukeuser',master_port=3308,master_connect_retry=60,master_log_file='mysql-bin.000002',master_log_pos=107;

mysql5.7版本sql_mode=only_full_group_by默认设置,会导致一些查询报500错误

注意:如果是新安装的mysql,这里删除没有问题,如果mysql已经使用了好长时间,那么千万千万不要删除 ibdata1【这里存放数据库的各种数据、data目录下存放数据库的各种表结构】,这样就可以用该种方式备份数据库。

6、主从同步期间遇到的错误

从数据库查看状态时,出现如下错误,如mysql报1062、1452错误

mysql>show slave status\G;

...

io thread    YES

sql thread  NO

...

mysql 1062错误----------》主从同步第二次,即从库已经存在该条数据,但主从还在继续同步报错【可能原因直接在从库进行了增删改操作】

mysql 1452错误----------》主从同步时,同步的数据有外键约束,但是从库的外键对应的主表无数据

7、IO thread--------》从库从主库拿binlog日志的进程

SQL thread-------》从库执行从主库拿到的binlog日志进行

8、几个文件作用:

master.info---------》记录主库访问信息【同步文件、同步位置、ip/port/用户名/密码等】

mysql-bin.index /server2-relay-bin.index-----------》记录当前数据库的binlog文件汇总 /记录从主库拿过来的binlog日志文件汇总

relay-log.info-------》中继日志,记录从库执行到当前的binlog日志及位置,主库的binlog日志及位置

ib_logfile0 / ib_logfile1------》记录事务commit之前的数据(redo、undo、回滚),记录回滚、日志重做

mysql-bin.000088---------》记录事务commit之后的数据,数据库已经操作过的更新数据记录

server2.err--------》当前mysql错误日志文件


做主从配置时,若出现不同步的现象,可以将从库的 master.info/ server2-relay-bin系列文件/ ib_logfile系列文件/ server2.err删除后,重新做同步

可能用到的其他命令:

slave stop;

set global sql_slave_skip_counter=1;  (跳过一个错误)

slave start;

reset slave all;

主库加解锁:

flush tables with read lock;

unlock tables;

9、mysql主从停止时,如下截图,坏掉的位置是 68619653

可以在从服务器使用如下语句导出sql语句,查看主从到哪块坏掉了【从导出语句的最开始往下看,很快能看到报错的语句,可以顺次执行该条语句及之前的语句,启动slave服务后若报错,发现新报错是刚才执行的几条语句之一,可以跳过】

mysqlbinlog --start-position=68619653  WIN-CES5DI7KTSN-relay-bin.000194 -d mydatabase > mydatabase.sql

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值