644   MySQL

一,配置主库 master

1,配置my.cnf,并重启 master 数据库

# 唯一标志ID
server-id=1
# master 数据操作记录的二进制日志,提供给 slave 读取 
log-bin=/var/lib/mysql/log/bin
# master 指定同步的数据库
binlog_do_db=test

重启 mysql

[mysql@VLR-123-177-206 ~]#  service mysql restart

 

 

2,在 master 上创建 slave 用户,提供给 slave 登录来同步数据

mysql>create user slave_server; 
//slave_server SLAVE权限,除此之外没有必要添加不必要的权限,密码为 slave_passwd。
// 这里%是通配符,表示10.123.189.0-10.123.189.255的从服务器都能以 slave_server 用户登陆主服务器。当然你也可以指定固定Ip。
mysql>GRANT REPLICATION SLAVE ON *.* TO 'slave_server'@'10.123.189.%' IDENTIFIED BY 'slave_passwd';

 

 

3,导出 master 中 test 数据库的原始数据

暂时把 test 表锁住,保证导出的数据一致性

mysql>use test;
mysql>FLUSH TABLES WITH READ LOCK;

执行数据导出

[mysql@VLR-123-177-206 ~]# mysqldump -u root -p --opt test > ~/test.sql

 

 

4,查看 master 当前数据操作记录的文件和起始点,后面配置 slave 会用到这些信息

mysql> show master status;
+------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------+----------+--------------+------------------+
| bin.000001 |      107 | test         |                  |
+------------+----------+--------------+------------------+
1 row in set (0.00 sec)

这个时候可以释放 test 表格了

mysql>use test;
mysql>UNLOCK TABLES;

 

 

二,配置从数据库 slave

1,导入 master 数据库的原始数据到 slave 数据库

[mysql@VLR-123-189-150 ~]#   mysql -u root -p test < ~/test.sql

 

 

2,配置my.cnf,并重启 slave 数据库

# 唯一标志ID
server-id=2
# slave 获取 master 数据的记录
relay-log=/var/lib/mysql/relay/log

重启 mysql

[mysql@VLR-123-189-150 ~]#  service mysql restart

 

 

3,slave 指定 master 的同步信息

// 包括 master 的host,port,user,password
// 以及 master 数据操作记录的二进制文件名log_file和起始点log_pos,对应master上面show master status内容的File和Position
mysql> CHANGE MASTER TO MASTER_HOST='10.123.177.206',MASTER_USER='slave_server', MASTER_PASSWORD='slave_passwd', MASTER_LOG_POS=3306,master_log_file='bin.000001', master_log_pos=107;
Query OK, 0 rows affected (0.05 sec)

 

 

4,开启 slave 同步,并查看状态,如果有Waiting for master to send event表示成功了

mysql> START SLAVE;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status;
+----------------------------------+----------------+--------------+-------------+---------------+-----------------+---------------------+
| Slave_IO_State                   | Master_Host    | Master_User  | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | 
+----------------------------------+----------------+--------------+-------------+---------------+-----------------+---------------------+
| Waiting for master to send event | 10.123.177.206 | slave_server |        3306 |            60 | bin.000001      |                 107 |
+----------------------------------+----------------+--------------+-------------+---------------+-----------------+---------------------+
1 row in set (0.00 sec)

 

 

三,遇到的一些问题

1,错误提示:

unknown variable 'master-host=10.123.177.206'

解决方法:
mysql5之后,slave在my.cnf配置master信息的参数已经被移除,只能在mysql命令行下通过 change master命令来配置了

 

 

2,错误提示:

Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event '' at 3306, the last event read from '/var/lib/mysql/log/bin.000001' at 4, the last byte read from '/var/lib/mysql/log/bin.000001' at 4.'

解决方法:
这是slave查看同步状态时Last_IO_Error的报错,有可能是master数据库操作记录的二进制日志文件master_log_file没有指定,或者是日志文件的起始点master_log_pos出错了,重新配置这两个参数即可

mysql>stop slave;
msyql>change master to master_log_file='bin.000001', master_log_pos=107;
mysql>start slave;



Leave a Reply

Your email address will not be published. Required fields are marked *