您的位置:首页 > 数据库 > MySQL

Mysql的主从同步设置

2015-08-21 21:48 806 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Mysql主从的优点有好多,容灾是一方面,现在单从备份的角度考虑配置主从设置。</span>

1. 因为使用已有的mysql,搭建不讲,以后有机会整理一些搭建的内容。

操作系统:

Mysql版本:

主服务器IP:10.57.122.60

从服务器IP:10.36.164.12

2. 在主服务器上创建同步账号:

GRANT REPLICATION SL***E,FILE ON *.* TO 'replication'@'10.1.1.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">3. 从服务器文件的更改</span>


server-id       = 3
#
# The replication master for this slave - required
master-host     =   
#
# The username the slave will use for authentication when connecting
# to the master - required
master-user     =   
#
# The password the slave will authenticate with when connecting to
# the master - required
master-password =   
#
# The port the master is listening on.
# optional - defaults to 3306
master-port     =  
#需要备份的数据库名 
replicate-do-db=
#不同步的库
binlog-ignore-db =
4. SL***E设置验证登陆MASTER

# mysql -h192.168.0.1 -uslave -ppassword
mysql> show grants for slave;
+-------------------------------------------------------------------------------------------------------------------------+
| Grants for slave@%                                                                                                     |
+-------------------------------------------------------------------------------------------------------------------------+
| GRANT FILE, REPLICATION SL***E ON *.* TO 'slave'@'%' IDENTIFIED BY PASSWORD '*1827DC630CAEB1E997DB2B2F2CC94EFD9C431477' |
+-------------------------------------------------------------------------------------------------------------------------+
1 row in set (4.10 sec)
5. 将主库DUMP下来给从库用

这里我是用的命令是:

mysqldump  -uslave -ppswd --lock-tables --events --triggers --routines --flush-logs --master-data=2 --databases db1 db2 db3 > ~/db.sql
再然后拷贝数据到slave机器,执行

mysqldump -uslave -ppswd -h 10.1.1.76 test < db.sql
此处遇到一些问题,刷屏太快,没来得及保存,是用如下的方式

mysql -uslave -p -h127.0.0.1 -P < db.sql
ERROR at line 138: Unknown command '\''.
但这里也会报一个错误,这种情况是因为编码的关系,简单查看之后,是用如下的命令得以解决。

mysql -uslave -p -h127.0.0.1 -P --default-character-set=utf8 < db.sql


6. 在从服务器设置从主服务器同步

使用grep命令查找到二进制日志的名称以及位置

user@host:~ $grep -i "change master" db.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000083', MASTER_LOG_POS=106;
生成change master语句,然后在slave上执行,

STOP SL***E; 
CHANGE MASTER TO MASTER_HOST='10.1.1.75',MASTER_USER='slave',MASTER_PASSWORD='pswd',MASTER_LOG_FILE='mysql-bin.000083', MASTER_LOG_POS=106;
START SL***E;
ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
细看log如下:

150821 21:30:24 [ERROR] Failed to open the relay log './mysql-relay-bin.000197' (relay_log_pos 88904539)

150821 21:30:24 [ERROR] Could not find target log during relay log initialization

在网络上查找原因:该服务器之前做过主从复制,中途修改过my.cnf配置文件,重启mysql之后,binlog文件名和relay-log文件名已经改变,所以不能再从之前的relay-log复制了。

解决方法:

mysql> reset slave;
Query OK, 0 rows affected (0.00 sec)
再然后执行上面的CHANGE MASTER成功执行。

这样就完成了主从同步的搭建,最后使用SHOW SL***E STATUS\G;查看Slave_IO_Running和Slave_SQL_Running的状态,如果都为Yes,就大功告成了。

接下来还需要做的一件事情是做主库和备库数据一致性的验证。后续待补充

注:本文为参考文章一的不完全复制,主要记录在该过程中自己遇到的问题以及解决方法。

参考文章:1. http://blog.chinaunix.net/uid-20639775-id-3254611.html
2. http://www.jb51.net/article/27221.htm
3. http://blog.chinaunix.net/uid-16844903-id-2448446.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: