Mysql主从同步配置

一、主数据库的配置

1. my.cnf(Linux)/my.ini(Windows)

在配置文件参数选项

[mysqld]

下面添加如下内容

log_bin=mysql-bin
server_id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
binlog_do_db=omc
binlog_ignore_db=mysql

说明:

server-id=1中的1可以任定义,只要是唯一的就行。
binlog-do-db=omc是表示只备份库omc。
binlog_ignore_db=mysql表示忽略备份库mysql。

2. 以root身份登录主数据库后台

2.1 创建用户

mysql> create user 'mstest'@'从服务器的地址' identified by '123456';

2.2 添加从数据库关系

mysql> grant replication slave on *.* to 'mstest'@'从服务器的地址' identified by '123456';

PS: 必须以root身份执行2.2,否则会提示没有权限之类的。

如:Access denied for user 'remote'@'%' (using password: YES)

3.重启数据库

3.1 查看主数据库状态

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 2122     | omc          | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+

3.2 如果看到如上图类似的数据,主数据库配置成功。

记录下File和Position的值(从数据库需的配置要用)。

 

二、从数据库的配置

1. my.cnf(Linux)/my.ini(Windows)

在配置文件参数选项

[mysqld]

下面添加如下内容

server_id=2

说明:

server-id=1中的1可以任定义,只要是唯一的就行。

2. 以root身份登录从数据库后台

mysql> change master to
mysql> master_host='主数据库的地址',
mysql> master_user='mstest',
mysql> master_port=3306,
mysql> master_log_file='mysql-bin.000002',
mysql> master_log_pos=2122,
mysql> master_connect_retry=10;

说明:

master_user是主数据库中刚才创建的信息。
master_log_file是主数据状态数据中的File项的值。
master_log_pos是主数据状态数据中的Position项的值。

2.1 查看从数据库状态

...
Slave_IO_Running | Slave_SQL_Running
Yes              | Yes
...

 

三、运行测试

手动主数据库中插入一条数据。

从数据库中自动的增加了这一条数据。

恭喜,主从数据库配置成功。


四、一个可能的报错

1. [ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log:

'binlog truncated in the middle of event; consider out of disk space on master; the first event 'mysql-bin.000002' at 2122

2. 原因:

主数据库的Position参数是不断变化的。这个错误提示就是从数据库的master_log_pos配置和主数据库的不匹配。

3. 解决:

1. 在主数据库执行show master status查看最新的Position值。

2. 在从数据库执行以下命令:

stop slave;
change master to master_log_file='mysql-bin.000002',master_log_pos=2319;
start slave;

 

posted @ 2017-09-20 13:07  一沙世界  阅读(341)  评论(0编辑  收藏  举报