• ADADADADAD

    mysql replication[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:57:36

    作者:文/会员上传

    简介:

    mysqlreplicaton环境:主:192.168.48.150 从:192.168.48.152简单的说,就是master把数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制进行数据操作。mysqlRepl

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    mysqlreplicaton

    环境:主:192.168.48.150

    从:192.168.48.152

    简单的说,就是master把数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制进行数据操作。

    mysqlReplicaton的用途

    1.failover

    2.backupserver

    3.highperformance

    master和slave上的数据是一样的,如果我们从master上进行写操作,slave上进行读操作,这就叫读写分离。

    配置Replication

    step1:

    Slave是通过MYSQL连接登陆到Master上来读取二进制日志的。因此需要在Master上给Slave配置权限。

    mysql>GRANTREPLICATIONSLAVEON*.*TO'repl'@'slaveip'IDENTIFIEDBY'replPass';

    mysql>FLUSHPRIVILEGES;

    eg:在Master上受权:

    mysql>grantreplicationslaveon*.*torepl@192.168.48.152identifiedby'repl';

    mysql>flushprivileges;

    在slave上测试连接:

    #mysql-h292.168.48.150-urepl-prepl

    可以连上表示没有问题。

    step2:

    在Master上要打开二进制日志,并标识server-id。

    server-id用于唯一标识主机,数字取值范围1-2**32-1.

    #vi/etc/my.cnf

    [mysqld]

    log-bin

    binlog-format=row

    sync-binlog=1

    server-id=1

    #servicemysqldrestart

    step3:

    制作一个Master的完整备份,并且执行prepare。

    #这里的原理是,将主要原有的数据备份打包到从上,从服务器直接还原,在这个基础之上再进行二进制传输同步,这样会节省资源。

    我们使用innobackupex这个工具,这个工具可以记录备份数据的二进制编号,这样从服务器就会从备份的基础上再进行同步,也就是增量备份。

    #innobackupex--user=dba--password=xxx/var/lib/backup/

    #innobackupex--use-memory=500m--apply-log/var/lib/backup/2014-03_16-40-05/

    eg:在master上的配置

    #innobackupex安装:http://my.oschina.net/sansom/blog/160434

    #mkdir/var/lib/backup/

    #cd/var/lib/backup/

    #innobackupex--user=root--password=123456/var/lib/backup/

    #这样目录里会生成原始文件

    #还要执行一步操作,就是生成innodb日志文件

    #innobackupex--use-memory=500m--apply-log/var/lib/backup/原始文件名/

    step4:

    将备份拷贝至slave,并放入数据文件目录。

    inmaster:

    #yuminstallopenssh-clients-y(masterandslavebothneedtoinstall)

    #scp-r/var/lib/backup/2016-03-11_10-26-10/192.168.48.152:/var/lib/backup/

    inslave:

    #servicemysqldstop

    #mv/var/lib/backup/2016-03-11_07-40-35/*/var/lib/mysql/(生产环境中不要直接覆盖)

    #ls(查看是否所有文件都被mv过去,如果没有,就再次复制过去)

    #cd/var/lib/mysql/

    #chown-Rmysql.*#拷贝过来的文件要改权限

    #servicemysqldstart(这一步我的mysql启不来了,原因是没有关闭selinux)

    #查看数据是否同步正确

    step5:

    在slave上配置server-id,标识服务器。

    #vi/etc/my.cnf

    [mysqld]

    server-id=2

    #servicemysqldrestart

    step6:

    查看并记录二进制日志中的positionID.(这个是innobackupex工具为我们生成的)

    inslave:

    #cd/var/lib/mysql

    catxtrabackup_binlog_info

    显示:mysqld-bin.000001341

    positionid为341

    step7:

    配置slavereplication.

    inslave:

    mysql>changemastertomaster_host='192.168.48.150',

    -->master_user='repl',

    -->master_password='repl',

    -->master_log_file='mysqld-bin.000001',

    -->master_log_pos=341;

    step8:

    启动replication,并检查结果。

    inslave:

    mysql>startslave;

    mysql>showslavestatus\G;

    结果如下:

    ***************************1.row***************************

    Slave_IO_State:Waitingformastertosendevent(当前无同步事件)

    Master_Host:192.168.48.150(主ip)

    Master_User:repl(主用户)

    Master_Port:3306(端口)

    Connect_Retry:60(重试时间/s)

    Master_Log_File:mysqld-bin.000001(主同步二进制文件)

    Read_Master_Log_Pos:341(主位置号)

    Relay_Log_File:mysqld-relay-bin.000002(从二进制文件)

    Relay_Log_Pos:252(从位置号)#主从的号虽然不一样,但是是有对应关系的,逻辑上是一样的。

    Relay_Master_Log_File:mysqld-bin.000001

    Slave_IO_Running:Yes(必须为yes时才正常)

    Slave_SQL_Running:Yes(必须为yes时才正常)

    #主会启运一个进程,从会启运两个进程,我们可以执行如下语句查看:

    master_mysql>showprocesslist\G;

    ***************************1.row***************************

    Id:11

    User:repl

    Host:192.168.48.152:54413

    db:NULL

    Command:BinlogDump

    Time:707

    State:Hassentallbinlogtoslave;waitingforbinlogtobeupdated

    Info:NULL

    ***************************2.row***************************

    slave_mysql>showprocesslist\G;

    ***************************2.row***************************

    Id:3

    User:systemuser

    Host:

    db:NULL

    Command:Connect

    Time:680

    State:Waitingformastertosendevent

    Info:NULL

    ***************************3.row***************************

    Id:4

    User:systemuser

    Host:

    db:NULL

    Command:Connect

    Time:680

    State:Hasreadallrelaylog;waitingfortheslaveI/Othreadtoupdateit

    Info:NULL

    3rowsinset(0.00sec)

    #从的两个进程,一个用于接收二进制,另一个用于解析二进制,执行语句。

    Replicate_Do_DB:

    Replicate_Ignore_DB:

    Replicate_Do_Table:

    Replicate_Ignore_Table:

    Replicate_Wild_Do_Table:

    Replicate_Wild_Ignore_Table:

    Last_Errno:0

    Last_Error:

    Skip_Counter:0

    Exec_Master_Log_Pos:341

    Relay_Log_Space:408

    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:

    1rowinset(0.00sec)

    这样就同步了,在主上操作的,从都会同步喽。


    mysql replication.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载