mysql主从配置步骤

来源:互联网 发布:mac出现五国 重装系统 编辑:程序博客网 时间:2024/05/22 13:41

假设要配置的两台机器分别为192.168.0.202192.168.0.203,其中202做主,203做从。

1. 创建主从同步用户

在两台mysql上创建同步用户让两个mysql可以互相通过repl/repl访问对方。

202执行:
GRANT ALL PRIVILEGES ON *.* TO 'repl'@'192.168.0.203' IDENTIFIED BY 'repl' WITH GRANT OPTION;

203执行:
GRANT ALL PRIVILEGES ON *.* TO 'repl'@'192.168.0.202' IDENTIFIED BY 'repl' WITH GRANT OPTION;

2. 修改机器标志。

对两台机器,打开/etc/my.cnf mysql配置文件,在[mysqld]下打开以下选项:
log-bin=mysql-bin

innodb_flush_log_at_trx_commit = 1


对于主mysql(202),打开选项:
server-id=1
对于203,从mysql,打开选项
server-id=2

注意server-id选项必须打开,并且集群中每个mysql都要有一个单独的值,不能重复。一般设置主为1,从为2, 3, 4....。手册上说只要不相同什么整数都没有关系,可以设置为IP的值,如:202, 203.

[mysqld]的最下面添加

sync_binlog=1

binlog-do-db=bookmark
binlog-do-db=debate
binlog-ignore-db=test
binlog-ignore-db=mysql

replicate-do-db=bookmark
replicate-do-db=debate

其中binlog-do-dbreplicate-do-db标记出需要进行同步的数据库,对于多个数据库,重复选项多次即可,如上面的配置则表示同步bookmarkdebatebinlog-ignore-db表示不进行同步的数据库,上面的配置表示不同步test, mysql库。

3. 设置同步位置

重新启动两个mysql. 分别输入:show master status; 命令,此时应该显示:

+------------------+----------+-----------------+------------------+

| File             | Position | Binlog_Do_DB    | Binlog_Ignore_DB |

+------------------+----------+-----------------+------------------+

| mysql-bin.000006 |       98 | bookmark,debate | test,mysql       |

+------------------+----------+-----------------+------------------+

1 row in set (0.00 sec)

输入:show slave status; 命令,应该显示:
Empty set (0.00 sec)

表示还没有从。

4. 建立关联

为了避免风险,主mysql现在最好不要对外提供服务,就是说主mysql的已有数据不要在动了。主mysql(202), 执行下面的命令:
FLUSH TABLES WITH READ LOCK;

锁定表,这个时候所有的commit都会失败。
执行:show master status;
把输出结果记录下来,尤其是那个FilePosition的值,后面要用。这里就是:mysql-bin.00000698

2mysql都停掉,命令:./mysqladmin -u root shutdown

现在把master mysql(202)的数据复制到203上,让slave的数据和master的同步。例如用sftp202 data目录的bookmark, debate复制到203data目录内。两边一定要保持一致。

5. 启动主从

启动slave mysql(203),执行命令:

CHANGE MASTER to MASTER_HOST='192.168.0.202', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=98

其中

master_host就是主mysql, master_log_file, master_log_pos为上一步在master端执行show master status; 获得的FilePosition值,此处换成那些值。注意数字是没有单引号引起来的。如果上面一步FilePosition没有值,master_log_file='', master_log_pos=4

然后执行: start slave;

启动master mysql(202).

master端执行:unlock tables; 解除第4步的锁表。

slave端执行:show slave status \G ; 

察看Slave_IO_State,一般应该为"Waiting for master to send event"

此时Slave_IO_RunningSlave_SQL_Running应该为yes,如果不是,在slave端执行: stop slave; start slave; 重启复制进程。

Replicate_Do_DB为要复制的数据库,和my.cnf配置的相同。

master端执行: show master status; 

对比File, Position的值和上面slave端的Master_Log_File,Read_Master_Log_Pos,两边相同则表示搭建完成。

6.测试集群正确。

a) master端创建一个数据库abc,然后察看slave端是否同步创建了。

b) abc插入几条记录,察看slave端数据是否同步插入。

c) 更新abc的记录,察看slave端数据是否同步

d) 删除abc的记录,察看slave端数据是否同步

e) 停掉slave服务器,重新执行2,3,4的内容,重启slave,看slave端数据是否同步。

在执行上面的操作过程中,每执行一次都用第6步的方法察看masterFile, Position值和slaveMaster_Log_File,Read_Master_Log_Pos是否相同,如果主从工作正常,这两个值在一次同步完成以后(slave statusSlave_IO_State显示:Waiting for master to send event)将会完全相同。

1. 日志检查 

  如果有错误,检查mysql data目录的 ...machinname.err 文件。

原创粉丝点击