1.在master 和 slave 上分别设置允许远程连接
mysql> use mysql;
mysql> grant all privileges on *.* to root@'%'identified by 'password';
mysql> flush privileges;
2.在Master数据库上创建一个test用户并进行授权,用于slave机器访问master数据库
mysql> create user 'test'@'%' identified by 'test';
mysql> grant replication slave on *.* to test@'%' identified by 'test';
mysql> flush privileges;
如果出现授权失败
请检查root用户有没有授权权限,再进行授权
mysql> select host,user,grant_priv,Super_priv from mysql.user;
+-----------+----------+------------+------------+
| host | user | grant_priv | Super_priv |
+-----------+----------+------------+------------+
| 127.0.0.1 | root | Y | Y |
| localhost | root | N | Y |
| 10.0.3.% | repluser | N | N |
+-----------+----------+------------+------------+
3 rows in set (0.00 sec)
可以看到localhost的grant_priv的值为N,也就是说root用户不能授权给其他用户,所以我们需要把这个值改为Y
mysql> update mysql.user set grant_priv='N' where host='localhost';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
3.修改master 配置 (/etc/my.cnf)
[mysqld]
server-id=1 # 唯一ID
log-bin=mysql-bin # 指定日志文件
binlog-do-db=TestDB # 需要同步的数据库
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
重启数据库
service mysqld restart
4.修改Slave数据库配置(/etc/my.cnf)
[mysqld]
server-id=2 # 唯一ID
read_only=1 # 设置Slave库只读
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
重启数据库
service mysqld restart
5.设置slave节点replication指向master
change master to
master_host='xx.xx.xx.xx', //master IP
master_user='test',
master_password='test',
master_port=3306,
master_log_file='mysql-bin.000001',
//master_log_file表示Master数据库中的log文件名,通过SHOW MASTER STATUS查询;
master_log_pos=0,
//master_log_pos 表示需要同步的二进制偏移量 ,0表示全部重新同步;
master_connect_retry=10;
启动
mysql> start slave;
6.查看状态
查看master
SHOW MASTER STATUS;
查看slave
SHOW SLAVE STATUS \G;
如果出现
Slave_SQL_Running: No状态
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.
解决办法:
mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;
如果再不行,重启master,重新让slave连接master.
(保证master与slave的数据库 表一致,因为没有赋予slave的建表权限)。
网友评论