美文网首页数据库技术
mysql Replication集群搭建方法

mysql Replication集群搭建方法

作者: 一生悬命Cat | 来源:发表于2019-03-16 14:47 被阅读15次

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的建表权限)。

相关文章

网友评论

    本文标题:mysql Replication集群搭建方法

    本文链接:https://www.haomeiwen.com/subject/eacsmqtx.html