MySQL5.6X 主从配置

来源:互联网 发布:金太阳手机炒股软件 编辑:程序博客网 时间:2024/05/29 04:54
  • 注意
    • 本文档只适用于mysql5.6+版本的主从配置。
    • 需要有两台不同的服务器、且已经安装好MySQL,版本最好一致(我这里使用两台虚拟机测试)。这里不讲述mysql的安装
    • 请先对基本的mysql知识有一定了解。

1、Master 配置

注意:先备份好主库,然后在手动执行sql脚本,将数据库同步到slave机器。

编辑mysql配置文件

     - /etc/my.cnf - 命令:vi /etc/my.cnf - 在my.cnf中加入如下配置:     - `#master setting        log-bin=mysql-bin        server-id=1        binlog-ignore-db=information_schema        binlog-ignore-db=mysql        binlog-do-db=test`其中:server-id : 为数据唯一标识,slave配置的时候,请注意不能相同         binlog-ignore-db: 不操作的数据库         binlog-do-db 表示需要同步的数据库,我这里使用test库测试    保存并退出编辑。 - 

重启数据库

     - 命令:service mysqld restart; - 创建同步账号,这个账号是给slave库用来做同步的,所以记得是在master数据库中创建账号     - 登录数据库:mysql -uroot -p ,回车后输入密码登录     - 创建账号:         - CREATE USER 'test'@'%' IDENTIFIED BY '123456';  //%是所有host 都能访问,这里可以指定固定IP        - 

给账号授权

             `grant replication slave on *.* to 'test'@'192.168.1.4' identified by '123456';`        - 刷新权限                 ` flush privileges; `        - 查看用户是否添加成功。
mysql> select host,user,password from mysql.user;+-----------------------+------+-------------------------------------------+| host                  | user | password                                  |+-----------------------+------+-------------------------------------------+| localhost             | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || localhost.localdomain | root |                                           || 127.0.0.1             | root |                                           || ::1                   | root |                                           || localhost             |      |                                           || localhost.localdomain |      |                                           || %                     | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || %                     | test | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || 192.168.1.4           | test | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || localhost             | test | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |+-----------------------+------+-------------------------------------------+

看到有test用户了。

    -

查看master相关信息


- 在mysql后入输入语句:show master status; 如图:
- 这里写图片描述

注意,配置slave时候需要对应这些信息。
至此,master配置完成。

-

2、salve配置

 - 在slave 机器上mysql my.cnf配置文件中加入如下配置:    #slave setting    log-bin=mysql-bin    server-id=2    binlog-ignore-db=information_schema    binlog-ignore-db=mysql    replicate-do-db=test    replicate-ignore-db=mysql    log-slave-updates    slave-skip-errors=all    slave-net-timeout=60

`

注意,server-id 和master要不相同。
配置完成、保存文件并重启数据库,service mysqld restart .

3、指定master信息

在前面的描述中,我们发现没有指定具体的master/slave机器地址,所以mysql5.6版本后和之前的版本不一样,不会像旧版本,在配置my.cnf文件中加入:master-user、等相关信息配置。登陆salve机器mysql后台,执行sql:
change master to master_host='192.168.1.3',master_user='test',master_password='123456',master_log_file='mysql-bin.000003', master_log_pos=120;

注意SQL中:
master_host: master 地址
master_user: mysql 操作的用户账号
master_password:密码
master_log_file:对应master 文件名称
master_log_pos:对应master 中Position信息

在master 机器mysql中,输入SQL 脚本,show master status。

4、验证 主从配置是否成功

进入 slave mysql后台中,输入:    show slave status\G;能看到相关信息入下:    mysql> show slave status\G

***************** 1. row *****************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.3
Master_User: test
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 1583
Relay_Log_File: localhost-relay-bin.000003
Relay_Log_Pos: 1746
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB: mysql

注意这两个属性:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

都为yes说明正常。否则需要排查问题,我这里,
Slave_IO_Running: No

我查看异常日志发现:
[ERROR] Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593
两台机器的UUID相同,这是因为我两台虚机机器是直接克隆的。
解决方式:
在slave中,将 没sql /usr/local/mysql/data 目录下的aotu.cnf文件重命名,然后重启mysql即可。

注意:通过查看mysql进程,可以看到错误日子文件地址:
命令:ps-ef|grep mysql
会看到有这句,我们通过错误可以排查相关问题。

--log-error=/usr/local/mysql/data/localhost.localdomain.err

同步测试

我们通过客户端连接两台服务器,在master test库中创建一张表,然后在slave机器中,刷新test数据库,如果有能看到刚刚在master中创建的表,说明一切顺利!

ok,配置到此结束。