mysql主从同步备份
说明:
本文主要讲mysql主从数据同步,从mysql实时同步主mysql的数据。这里,一般要求主msyql与从mysql版本相同或主msyql不高于从mysql版本(版本查询>select version())。一般稳健的做法都是使其版本相同,因为不同mysql版本之间的binlog(二进制日志)格式可能不一样,有可能会导致同步异常。
主mysql: 192.168.1.202
从mysql: 192.168.1.203
实现:
一.配置主mysql
1.修改主mysql配置,注意这里主mysql与从mysql server-id一定不能相同
# vim /etc/mysql/my.cnf //内容如下server-id = 1log-bin= /var/log/mysql/mysql-bin.log
expire_logs_days= 10 //设置binlog超期日期max_binlog_size= 100M //不一定要,设置单个binlog最大文件大小binlog_do_db=myslave//需要同步多个数据库,请另起一行设置binlog_do_db = 同步数据库名称binlog_ignore_db=mysql//不同步数据库
2.重启主mysql,使配置生效
# /etc/init.d/mysql restart
3.主mysql中给予从mysql REPLICATION SLAVE权限即可,192.168.1.203为从库ip
>grant replication slave on*.*to slave@192.168.1.203identifiedby '123456'; >quit
4.主mysql新建myslave数据库及表结构,用于测试。
# /usr/local/mysql/bin/mysql -u root -p -S /tmp/mysql.sock >CREATE DATABASE myslave CHARSET'utf8'; > usemyslave; >CREATE TABLE`users` ( `id`mediumint(8) unsignedNOT NULL AUTO_INCREMENT, `username`varchar(20)NOT NULL, `website`varchar(30)DEFAULT NULL,PRIMARY KEY(`id`) )ENGINE=MyISAMDEFAULT CHARSET=utf8; >CREATE TABLE`users_log` ( `user_log_id`mediumint(8) unsignedNOT NULL AUTO_INCREMENT, `info`varchar(200)DEFAULT NULL, `uid`mediumint(8) unsignedNOT NULL,PRIMARY KEY(`user_log_id`) )ENGINE=MyISAMDEFAULT CHARSET=utf8;
5.主mysql导出myslave数据库,先锁住myslave不让其有写入操作,这个窗口不要关,否则lock会失效
>flush tableswithreadlock; # mysqldump -uroot -proot -P3306 --databases myslave > /tmp/backdb.sql //导出单个数据库时 # mysqldump -uroot -proot -P3306 --databases db1 db2 > /tmp/backdb.sql //导出多个数据库时 >unlock tables//导出成功后,解锁表
6.新开个终端,进入mysql查看binlog的File,Position,记下,很重要!
# /usr/local/mysql/bin/mysql -u root -p -S /tmp/mysql.sock >show master status; +——————+———-+————–+——————+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +——————+———-+————–+——————+ |mysql-bin.000001 | 106 |myslave |mysql | +——————+———-+————–+——————+
二.从mysql操作,修改my.cnf
1.修改从mysql配置文件/etc/my.cnf
# vim /etc/mysql/my.cnfserver-id= 10 //我只修改了这条,其它都是在mysql命令行修改。所以下面的都不需要master-host= 192.168.45.7master-user=slave
master-password= 123456master-port= 3306master-connect-retry = 5replicate-do-db=myslave
replicate-ignore-db=mysql
2.修改完my.cnf重启mysql,使配置生效
# /etc/init.d/mysql restart
3.导入主mysql dump出的数据。可能需要先使用create database 库,新建库,具体没注意。
# /usr/local/mysql/bin/mysql -u root -p -S /tmp/mysql.sock >source/tmp/backdb.sql//个人理解,如果多个库在同一个mysqldump文件中,要同时导入所有库,就不用> use 库,直接source /tmp/backdb.sql。如果要导入多个库,但不是全部,可能得> use db1,> source /tmp/backdb.sql;> use db2,> source /tmp/backdb.sql
4.查看是否导入成功
>show tables; +——————-+ | Tables_in_myslave | +——————-+ |users | |users_log | +——————-+ 2rowsin set (0.00sec)
5.配置Slave信息并启动Slave服务,修改master前要先停slave服务
>stop slave//默认是关闭 >CHANGE MASTER TO>MASTER_HOST='192.168.1.100', >MASTER_USER='slave', >MASTER_PORT=3306, //注意不要引号 >MASTER_PASSWORD='123456', >MASTER_LOG_FILE='mysql-bin.000004', >MASTER_LOG_POS=106; //注意不要引号
以上关键的是MASTER_LOG_FILE以及MASTER_LOG_POS值,可以从Master服务器获得,如果不设置,将无法正常启动Slave服务
6.启动Slave服务
>start slave; >show slave status/G;
当输入命令后会出现一大堆的状态,具体看Slave_IO_Running以及Slave_SQL_Running的状态,如果都是Yes就代表正常
然后还可以看到Slave_IO_State的状态是Waiting for master to send event,含义是等待Master服务器发送事件
三.测试:,在Master服务器插入一条数据
> usemyslave; >insertintousers(username,website)values('edison','http://www.gaingreat.com');
插入成功之后,稍等片刻,就可以在Slave服务器上查看到相同记录,主从同步有时延
附录:
1.查看从mysql状态
>show slave statusG; Waiting for master to sendevent Slave_IO_Running: Yes Slave_SQL_Running: Yes
以上二行同时为Yes说明配置成功
2.查看主mysql状态
>show master status;
3.如果想要查看当前Slave服务器的同步状态及偏移值等信息,请查找master.info文件
more/var/lib/mysql/master.info
4.查看Slave执行binlog文件的情况
#more /var/lib/mysql/relay-log.info
原文参考:
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
MySQL数据库的同步配置+MySql 读写分离
转载请注明:酷喃|coolnull| » mysql主从同步备份