MySQL 主从同步配置

来源:互联网 发布:java怎么编程 编辑:程序博客网 时间:2024/06/07 06:07
环境

        两台虚拟机,一主一从,防火墙要放开(可以直接关闭防火墙)

        关闭防火墙
1
2
3
4
5
6
su root
service iptables stop #关闭防火墙
service iptables status #验证是否关闭
chkconfig iptables off #关闭防火墙的开机自动运行
chkconfig –list | grep iptables #验证防火墙的开机自动运行
vim /etc/sysconfig/selinux # 禁用selinux,将SELINUX=disabled

安装 MySQL
    
        Linux下yum安装MySQL yum安装MySQL指定版本.note ,Blog:Linux下yum安装MySQL yum安装MySQL指定版本

master 配置

1. 拷贝并修改配置文件

1
cp /user/share/mysql/my-medium.cnf  /etc/my.cnf

2. 修改master上的配置文件 my.cnf

        在[mysqld]下添加如下字段:
1
2
3
4
5
6
7
server-id=1
log-bin=log
#需要同步的数据库
binlog-do-db=test
# binlog-do-db=test2
#被忽略的数据库
binlog-ignore-db=mysql

3. 在master上为slave添加一个同步账号

        grant replication slave on *.* to 'jerome'@'*' identified by 'jeromepassword';

4. 重启master的mysql服务

        service mysqld restart;
        查看master日志情况:show master status\G;

slave 配置

1. 拷贝并修改配置文件

1
cp /user/share/mysql/my-medium.cnf  /etc/my.cnf

2. 修改slave上的配置文件my.cnf。

        在[mysqld]下添加如下字段:记得把原先的server-id注释掉。
1
2
3
4
5
6
7
8
9
10
11
server-id=2
master-host=192.168.17.128
master-user= jerome
master-password= jeromepassword
master-port=3306
master-connect-retry=60
#需要同步的数据库
binlog-do-db=test
# binlog-do-db=test2
#被忽略的数据库
binlog-ignore-db=mysql

3. 重启mysql服务

        service mysqld restart;

4. 启动slave并查看slave情况

1
2
3
mysql -uroot -proot;
mysql>start slave;
mysql>show slave status\G;
        如果Slave_IO_Running、Slave_SQL_Running状态为Yes则表明设置成功

问题

问题1:Slave_IO_Running: No或者Slave_SQL_Running: No

1. 停掉slave服务

1
2
mysql> slave stop;
Query OK, 0 rows affected (2.01 sec)
 
2. 解决办法
解决办法1
a.在master上查看。
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000002
Position: 106
Binlog_Do_DB: test
Binlog_Ignore_DB:
1 row in set (0.00 sec)
b.到slave上手动同步。
mysql>change master to master_log_file='mysql-bin.000002',master_log_pos=106;
Query OK, 0 rows affected (0.00 sec)
mysql> slave start;
#查看是否都是YES
mysql> show slave status\G;

解决方法2
mysql> slave stop;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
#查看是否都是YES
mysql> show slave status\G;

以上如果还是显示Slave_IO_Running:NO,可以多次查看show slave status\G;发现有报错信息,大概意思是server_id不能和主库一样
1. 停止slave并查看当前server_id
    停止:slave stop;
    查看server_id:show variables like 'server_id';
2. 修改server_id并启动salve
    修改:set global server_id=2;
    启动:slave start;
    查看是否为YES了:show slave status\G;

其他

        Slave_IO_Running:连接到主库,并读取主库的日志到本地,生成本地日志文件
        Slave_SQL_Running:读取本地日志文件,并执行日志里的SQL命令。

常用命令:

1
2
3
4
slave stop;
reset slave;
slave start;
show slave status\G;



0 0