zoukankan      html  css  js  c++  java
  • Linux下mysql主从同步备份masterslave详细配置

    1、概要
    首先要准备两台服务器,一台主服务器(Master),另一台从服务器(Slave),然后要保证Master与Slave的版本要相同且Master不能高于Slave的版本,一般稳健的做法都是使其版本相同,因为MySQL不同版本之间的binlog(二进制日志)格式可能会不一样,最后会导致同步出现异常。介绍先到这里,以下我们先确认两台服务器的信息:

    主服务器(Master):
    IP:192.168.1.100
    系统:Linux(Ubuntu 64位 v10.10)
    MySQL版本:5.1.49
    需要同步的数据库名:myslave
    用于同步的帐号:slave001
    用于同步的密码:timescode888

    ————————————–

    从服务器(Slave)
    IP:192.168.1.90
    系统:Linux(Ubuntu 32位 v10.10)
    MySQL版本:5.1.49
    需要同步的数据库名:myslave

    注:以下的配置以及测试都是使用SSH来进行的

    2、修改Master服务器的配置

    #打开my.cnf配置文件

    vi /etc/mysql/my.cnf

    #键入 /server-id 找到server-id的位置,把以下内容对照设置进去,键入 i,激活输入状态
    #注意,这里的Master与Slave的server-id不能相同

    server-id               = 1
    log_bin                 = /var/log/mysql/mysql-bin.log
    expire_logs_days        = 10
    max_binlog_size         = 100M
    binlog_do_db            = myslave #如果需要同时同步多个数据库,请另起一行设置binlog_do_db=需要同步的数据库名称
    binlog_ignore_db        = mysql

    3、在Master建立myslave数据库并建立相关的数据表,SQL代码如下

    #建立数据库
    mysql -u root -p

    mysql> CREATE DATABASE myslave CHARSET ‘utf8′;

    #建立数据表
    – —————————-
    – Table structure for `users`
    – —————————-
    DROP TABLE IF EXISTS `users`;
    CREATE TABLE `users` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    `username` varchar(20) NOT NULL,
    `website` varchar(30) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    – —————————-
    – Table structure for `users_log`
    – —————————-
    DROP TABLE IF EXISTS `users_log`;
    CREATE TABLE `users_log` (
    `user_log_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    `info` varchar(200) DEFAULT NULL,
    `uid` mediumint(8) unsigned NOT NULL,
    PRIMARY KEY (`user_log_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    4、建立用于replication的帐号
    grant replication slave on *.* to myslave001@’%’ identified by ‘timescode888′;
    quit
    #重启服务器
    /etc/init.d/mysql restart

    #进入mysql查看有没有生效
    mysql -u root -p

    mysql> show master status;
    +——————+———-+————–+——————+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +——————+———-+————–+——————+
    | mysql-bin.000001 |      106 | myslave      | mysql            |
    +——————+———-+————–+——————+

    #以上可以看出跟在my.cnf里设置的是一致的,在此要记下File以及Position的值,后面在Slave服务器上会用到

    5、使用mysqldump导出Master中的myslave数据库

    #在此必须要加入–master-data选项,保证在dump时会记录到binlog名称和偏移值
    #而使用–lock-all-tables的原因就是为了数据在导出的时候没有其它新数据插入,保证一致性

    mysqldump –master-data=1 –lock-all-tables=true -uroot -pwww.timescode.com myslave > /home/myslave_bak_20110326.sql

    #具体的根据实际情况而变化,不一定要使用root帐号来导出数据

    6、使用sz命令下载备份文件
    sz /home/myslave_bak_20110326.sql

    7、修改Slave服务器的配置

    #具体的路径以及版本都与Master服务器一样
    vi /etc/mysql/my.cnf

    #请对照设置,如下
    server-id        = 2
    master-host        = 192.168.1.100
    master-user        = myslave001
    master-password        = timescode888
    master-port        = 3306
    master-connect-retry    = 5
    replicate-do-db        = myslave
    replicate-ignore-db    = mysql

    8、使用rz命令上传备份文件到Slave服务器
    rz
    #当弹出选项框后选取刚才下载的备份文件
    #把文件上传到home目录,具体的你可以根据你实际环境来操作

    9、建立数据库并导入备份数据
    mysql -u root -p

    mysql> CREATE DATABASE myslave CHARSET ‘utf8′;
    mysql> use myslave;
    mysql> source /home/myslave_bak_20110326.sql;

    #查看有没有导入成功
    mysql> show tables;
    +——————-+
    | Tables_in_myslave |
    +——————-+
    | users             |
    | users_log         |
    +——————-+
    2 rows in set (0.00 sec)

    #由于刚才没有重启mysql,先需要退出去重启一下
    mysql> quit

    10、重启Slave服务器上的mysql
    /etc/init.d/mysql restart
    mysql -u root -p

    #配置Slave信息并启动Slave服务
    mysql> CHANGE MASTER TO
    -> MASTER_HOST=’192.168.1.100′,
    -> MASTER_USER=’myslave001′,
    -> MASTER_PASSWORD=’timescode888′,
    -> MASTER_LOG_FILE=’mysql-bin.000001′,
    -> MASTER_LOG_POS=106;

    #以上的是关键,具体的MASTER_LOG_FILE以及MASTER_LOG_POS的数据,可以从Master服务器获得,如果不设置,将无法正常启动Slave服务
    #启动Slave服务
    mysql> start slave;

    #查看同步状态
    mysql> show slave status;

    #当输入命令后会出现一大堆的状态,具体的看Slave_IO_Running以及Slave_SQL_Running的状态,如果都是Yes就代表正常
    #然后还可以看到Slave_IO_State的状态是Waiting for master to send event,含义是等待Master服务器发送事件

    11、测试同步
    #在Master服务器插入一条数据
    mysql> use myslave;
    mysql> INSERT INTO users(‘username’,'website’) VALUES(‘edison’,'http://www.timescode.com’);

    #插入成功之后,稍等片刻,就可以在Slave服务器上查看到相同记录
    #如果插入不成功,放心,你可以再仔细检查一下本配置文档,是否有那一步有遗漏或没正确配置。

    12、后述
    #如果想要查看当前Slave服务器的同步状态及偏移值等信息,请查找master.info文件

    more /var/lib/mysql/master.info

    #查看Slave执行binlog文件的情况
    more /var/lib/mysql/relay-log.info

    #如果对本文有疑问或建议请给我留言。

    Mysql 主从服务与集群的区别

    在Mysql Master/Slave 模式备份中(Mysql 4以上提供),
    Slave主要是来备份数据的,只有当Master出现故障时,Slave才会接过Master的服务,
    对外部请求进行处理,直到Master恢复正常。
    就是说,在Master/Slave中,要么是Master在服务,要么是Slave在服务,不会Master/Slave同时提供服务。
    而在Mysql cluster中(mysql 5 以上提供基于内存交换数据的cluster),
    是Cluster的各个mysql服务在同时对外处理请求,这种模式性能更高,
    同时各个集群节点的数据是基于内存进行互备的。
    在Mysql 5 的 cluster中,会同时存在两份相同的数据,一份是基于硬盘的,是存储本地数据库实例的数据的,
    另外一份是基于内存的,用于与集群中的其他节点进行数据同步的。
    相对来说,对系统的开销会大一些,而且不能适应于大数据量的应用环境中,因为受到系统内存的限制。
  • 相关阅读:
    第三十五课、文本编辑器中的数据存取------------------狄泰软件学院
    第三十四课、缓冲区操作与目录操作------------------狄泰软件学院
    第三十三课、文件流和数据流------------------狄泰软件学院
    Machine Learning in Action(6) AdaBoost算法
    Machine Learning in Action(5) SVM算法
    machine learning for hacker记录(4) 智能邮箱(排序学习&推荐系统)
    linux mysql乱码问题
    php7+新特性
    shell学习(6)- curl
    shell学习(5)- sort
  • 原文地址:https://www.cnblogs.com/cosiray/p/2383963.html
Copyright © 2011-2022 走看看