Mysql5.5主从复制配置

 

1.服务器状态
服务器A:192.168.1.1
服务器B:192.168.1.2

1.主库编辑my.cnf:

2.创建同步用户
主机域A:192.168.1.2  用户名A:sync_a  密码A:aaa
主机域B:192.168.1.1  用户名B:sync_b  密码B:bbb
至少分配以下权限grant replication slave

[mysqld]

3.执行flush privileges

log-bin=NEW_NAME

4.停止MySQL

server-id=1     #配一个唯一的ID编号,1至32。

5.配置my.cnf(my.ini)

#设置要进行或不要进行主从复制的数据库名,同时也要在Slave 上设定。

服务器A 服务器B
user = mysql教程
log-bin = mysql-bin
server-id = 1
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
log-slave-updates
slave-skip-errors = all
sync_binlog = 1 user = mysql
log-bin = mysql-bin
server-id = 2
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
log-slave-updates
slave-skip-errors = all
sync_binlog = 1

binlog-do-db=数据库名1

server-id必须唯一
binlog-do-db和replicate-do-db表示需要同步的数据库教程
binlog-ignore-db和replicate-ignore-db表示不需要同步的数据库
请不要加入以下命令,该命令并不会解决uid跳号的问题,恰恰相反以下两行命令才是导致uid跳号的罪魁祸首
auto_increment_increment = 2
auto_increment_offset = 1

binlog-do-db=数据库名2

6.重新启动MySQL

binlog-ignore-db=数据库名1

7.进入MySQL控制台

binlog-ignore-db=数据库名2

服务器A:
show master status G
flush tables with read lock;
服务器B:
show master status G
flush tables with read lock;

mysql> grant replication slave on *.* to
[email protected]
identified by ‘123456’ ;

同时记录下两台服务器的File和Position,此处假设:

mysql> flush privileges;

A: File: mysql-bin.000001
  Position: 001
B: File: mysql-bin.000002
  Position: 002

mysql> show master status;

服务器A:
change master to
    -> master_host=’192.168.1.2′,
    -> master_user=’sync_b’,
    -> master_password=’bbb’,
    -> master_log_file=’mysql-bin.000002′,
    -> master_log_pos=002;
服务器B:
change master to
    -> master_host=’192.168.1.1′,
    -> master_user=’sync_a’,
    -> master_password=’aaa’,
    -> master_log_file=’mysql-bin.000001′,
    -> master_log_pos=001;

+——————+———-+————–+——————+

此处填写的数据完全相反

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

8.执行show processlist G查看是否同步成功

+——————+———-+————–+——————+

方法二

| mysql-bin.000008 |      337 |              |                  |

两台服务器
192.168.1.1(A)
192.168.1.2(B)
先保证这mysql的版本是一致的,参考http://dev.mysql.com/doc/refman/5.1/zh/replication.html\#replication-implementation-details,否则复制中的异常情况很折腾人。

+——————+———-+————–+——————+

1.在两台mysql上创建用户,设置权限
A上添加:

记录下二进制日志文件名和位置

#grant replication slave,replication client,reload,super on *.* to
‘sync_user’@’192.168.1.2’ identified by ‘123456’ with grant
option;//用于B访问

 

B上:

2.从库编辑my.cnf,把server-id改成不和主机相同的数字。

#grant replication slave,replication client,reload,super on *.* to
‘sync_user’@’192.168.1.1’ identified by ‘123456’ with grant
option;//用于A访问

如果只想同步指定的数据库,可以添加  replicate-do-db = yourdatabase,

执行  #flush privileges; 更新数据库使用户生效。

同步几个就复制几个,把数据库名改了就好。

2.在/etc/my.cnf上进行相关配置

[mysqld]

A B
server-id         = 1

server-id=2     #唯一

master-host     =192.168.1.2

#设置要进行或不要进行主从复制的数据库名,同时也要在Master 上设定。

master-user     =sync_user

replicate-do-db=数据库名1

master-pass     =123456

replicate-do-db=数据库名2

master-port     =3306

replicate-ignore-db=数据库名1

master-connect-retry=60

replicate-ignore-db=数据库名2

replicate-do-db =db1

 

replicate-do-db =db2

mysql> change master to
master_host=’192.168.1.100′,master_user=’slaveuser’,master_password=’123456′,
master_log_file=’mysql-bin.000008′,master_log_pos=337;

replicate-ignore-db=mysql  server-id         = 2

mysql> start slave;

master-host     =192.168.1.1

mysql> show slave status\G;

master-user     =sync_user

如果出现:

master-pass     =123456

Slave_IO_Running: Yes

master-port     =3306

Slave_SQL_Running: Yes

master-connect-retry=60

以上两项都为Yes,那说明没问题了。如果指定了个别的数据库,还可以看到

replicate-do-db =db1

注:如果出现Slave_SQL_Running:connecting的现象,首先在从库命令行下输入:

replicate-do-db =db2

#mysql -uslaveuser -h 192.168.1.100 -p123456

replicate-ignore-db=mysql
 
   

看是否能登入mysql,如果是拒绝等提示,那要查看主机上的第从库授权操作是否用户的权限等设置正确。

注意

 

1.server_id必须为唯一.

如果开始的环境不是主从架构,跑了一段时间已经有了数据,这时候要先在主机上加锁:flush
tables with read lock;

2.如果想要同时同步多个库,添加多行replicate-do-db,每行指定一个数据库。不能使用replicate-do-db=db1,db2的形式

打包主机的数据目录:#tar zcf  /tmpdatabak.tgz
/opt/data,拷贝这个压缩包到从机,解压后,做主从的配置。

3.replicate-ignore-db:指定不进行同步的数据库。

然后解锁:unlock tables;

保存后,重启mysql

 

#mysqladmin -u root -p shutdown

作者 iloveyin

#mysqld_safe –user=mysql

http://www.bkjia.com/Mysql/489336.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/489336.htmlTechArticle1.主库编辑my.cnf: [mysqld] log-bin=NEW_NAME
server-id=1 #配一个唯一的ID编号,1至32。
#设置要进行或不要进行主从复制的数据库名,同时也要在Sl…

3.把两台服务器上需要同步的数据库进行拷贝,保证这两台数据库初始状态一致。

4.进行双向同步

双向同步就是把单向同步反过来在做一遍,但一定要注意操作的顺序,这是成功的关键

step1.在A上mysql shell中执行

#show master status;

+——————+———-+————–+——————+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |