时间:2021-07-01 10:21:17 帮助过:6人阅读
环境:mysql版本一致,均为5.7.18
master xuegod4 ip 192.168.10.34 数据库密码 yourpasswd
slave xuegod5 ip 192.168.10.35 数据库密码 yourpasswd
mysql> create database HA;
mysql> use HA;
mysql> create table T1(id int,name varchar(20));
service mysqld stop
vim /etc/my.cnf
log-bin=mysql-bin-master #启用二进制日志
server-id=1 #本机数据库ID 标示
binlog-do-db=HA #可以被从服务器复制的库。二进制需要同步的数据库名
binlog-ignore-db=mysql #不可以被从服务器复制的库
service mysqld restart
01. mysql> grant replication slave on *.* to slave@10.10.10.64 identified by "123456";
注:这里如果报错说密码太简单,可以修改密码策略
mysql> set global validate_password_policy=0
授权完后刷新权限:
mysql> flush privileges;
mysql> show master status;
查看mysql数据目录,yum方式安装数据目录为/var/lib/mysql
[root@xuegod4 ~]# ls /var/lib/mysql
mysql> show binlog events\G
复制前要保证同步的数据库一致
[root@xuegod4 ~]# mysqldump -uroot -pyourpasswd HA >HA.sql #可以导出数据库
将导出的数据库传给从服务器,方法:
[root@xuegod4 ~]# scp HA.sql 192.168.10.35:/root/
mysql> show variables like ‘%version%‘;
[root@xuegod5 ~]# mysql -uslave -pyourpasswd -h 192.168.10.34
看不到HA数据库,是因为只有复制的权限,没有读的权限。
mysql> create database HA;
[root@xuegod5 ~]# mysql -uroot -pyourpasswd HA<HA.sql
从服务器没必要开启bin-log日志
[root@xuegod5 ~]# service mysqld stop
[root@xuegod5 ~]# vim /etc/my.cnf
master-host=192.168.10.34 #指定主服务器IP地址
master-user=slave #指定定在主服务器上可以进行同步的用户名
master-password=yourpasswd #密码
mysql版本低于5.7版本才需要配置以上三句。5.7版本只需要配置:
server-id=2 #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。
可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实例。
[root@xuegod5 ~]# service mysqld restart #重启mysql服务
mysql>stop slave; #停止slave
mysql> change master to master_host=‘192.168.10.34‘,master_user=‘slave‘,master_password=‘yourpasswd‘;
mysql> start slave; #启动slave
mysql> show slave status\G #查看状态
Slave_IO_Running :一个负责与主机的io通信
Slave_SQL_Running:负责自己的slave mysql进程
再到主服务器上查看状态:
mysql> show processlist \G
在主数据库服务器插入数据:
mysql> insert into T1 value(6,‘yehailun‘);
Query OK, 1 row affected (0.05 sec)
在从数据库服务器上查询
mysql> select * from T1;
+------+----------+
| id | name |
+------+----------+
| 6 | yehailun |
+------+----------+
1 row in set (0.00 sec)
如果遇到主从不同步,看一下主从bin-log的位置,然后再同步。
在主服务器上看二进制日志事件列表
mysql> show binlog events \G
从服务器执行MySQL命令下:
mysql> stop slave;
Query OK, 0 rows affected (0.03 sec)
mysql> change master to master_log_file=‘mysql-bin-master.000001‘,master_log_pos=1117;
Query OK, 0 rows affected (0.04 sec)
#根据上面主服务器的show master status的结果,进行从服务器的二进制数据库记录回归,达到同步的效果
mysql> start slave;
Query OK, 0 rows affected (0.03 sec)
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果都是yes就代表在同步
重启从服务器,再查看状态:
停止从服务器slave stop;
开启从服务器slave start;
排错思路:
1、二进制日志没有开启
2、IPTABLES 没有放开端口
3、对应的主机 IP地址写错了
SQL线程出错
1、主从服务器数据库结构不统一
出错后,数据少,可以手动解决创建插入,再更新slave状态。
注:如果主上误删除了。那么从上也就误删除了。 #因此主上要定期做mysqldump备份。
通过mysql主主:进行mysql 双向同步数据库HA的配置
mysql主:服务端:xuegod4 IP:192.168.10.34
mysql主:服务端:xuegod5 IP:192.168.10.35
先清空一下二进制日志,mysql> reset master
在上面主从的基础上进行配置
mysql> create database HA;
mysql> use HA;
mysql> create table T1(id int,name varchar(20));
它有两种身份:
身份1: xuegod5的主,身份2: xuegod5的从。
[root@xuegod4 ~]# vim /etc/my.cnf
server-id = 1
log-bin=mysql-bin-master
binlog-do-db=HA
binlog-ignore-db=mysql #避免同步mysql用户相关配置
[root@xuegod4 ~]# service mysqld restart
查状态
mysql> show master status;
修改密码策略
mysql> set global validate_password_policy=0;
mysql> grant replication slave on *.* to slave@‘192.168.10.35‘ identified by ‘yourpasswd‘;
如果不符合密码要求报错修改如下(5.7版本)
mysql> set global validate_password_policy=0; #定义复杂度
mysql> set global validate_password_length=1; #定义长度 默认是8
刷新权限
mysql> flush privileges;
mysql 5.1的配置
master-host=192.168.1.64 #指定主服务器IP地址
master-user=slave64 #指定定在主服务器上可以进行同步的用户名
master-password=123456 #密码
#master-port=3306 可以不写
replicate-do-db=HA #要复制的数据库
master-connect-retry=60 #断点重新连接时间
mysql 5.7配置
[root@xuegod5 ~]# vim /etc/my.cnf
server-id=2
log-bin=master-bin-slave
binlog-do-db=HA
binlog-ignore-db=mysql
[root@xuegod5 ~]# service mysqld restart
查看状态;
mysql> show master status;
[root@xuegod5 ~]# mysql -uslave -pyourpasswd -h 192.168.10.34
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.18-log MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql>
mysql> grant replication slave on *.* to slave@‘192.168.10.34‘ identified by ‘yourpasswd‘;
如果不符合密码要求报错修改如下(5.7版本)
mysql> set global validate_password_policy=0; #定义复杂度
mysql> set global validate_password_length=1; #定义长度 默认是8
刷新权限
mysql> flush privileges;
mysql> change master to master_host=‘192.168.10.34‘,master_user=‘slave‘,master_password=‘yourpasswd‘;
mysql> start slave;
mysql> show slave status\G
mysql> change master to master192.168.10.35‘,master_user=‘slave‘,master_password=‘yourpasswd‘;
mysql> start slave;
mysql> show slave status\G
mysql> show slave status\G
mysql> use HA
Database changed
mysql> insert into T1 values(1,‘zhangsan‘);
Query OK, 1 row affected (0.02 sec)
mysql> insert into T1 value(2,‘lisi‘);
Query OK, 1 row affected (0.06 sec)
注意:这种M-M架构没有什么好处,他往往给我们产生一种实现了负载均衡的错觉
环境:
xuegod4 master mysql5.7.18 192.168.10.34
xuegod5 slave中继 mysql5. 7.18 192.168.10.35
xuegod6 slave mysql5. 7.18 192.168.10.36
mysql> create database HA;
mysql> use HA;
mysql> create table T1(id int,name varchar(20));
修改密码策略:
mysql> set global validate_password_policy=0;
在主服务上授权用户:
mysql> grant replication slave on *.* to ‘repl‘@192.168.10.35 identified by ‘yourpasswd‘;
刷新权限:
mysql> flush privileges;
[root@xuegod4 ~]# vim /etc/my.cnf
server-id = 1
binlog-do-db = HA
log-bin=mysql-bin-master
binlog-ignore-db=mysql
sync-binlog=1
binlog-format=row
重启服务:
[root@xuegod4 ~]# service mysqld restart
[root@xuegod4 ~]# mysqldump -uroot -pyourpasswd HA -B>HA.sql #使用-B导入数据库的时候不用新建库
[root@xuegod4 ~]# scp HA.sql 192.168.10.35:/root
[root@xuegod4 ~]# scp HA.sql 192.168.10.36:/root
mysql> create database HA;
[root@xuegod5 ~]# mysql -uroot -pyourpasswd HA<HA.sql
[root@xuegod5 ~]# vim /etc/my.cnf
server-id=2
binlog-do-db=HA
log-bin=mysql-bin-slave1
binlog-ignore-db=mysql
binlog-format=row
log-slave-updates=1 #把它从relay-log当中读取出来的二进制日志并且这本机上执行的操作也记录这自己的二进制日志里面,这样才能使第三台slave通过中继slave读取到相应数据变化
重启服务:
[root@xuegod5 ~]# service mysqld restart
mysql> change master to master_host=‘192.168.10.34‘,master_user=‘repl‘,master_password=‘yourpasswd‘;
mysql> start slave;
查一下状态:
再授权一个用户给slave(xuegod6)
mysql> set global validate_password_policy=0; #修改密码策略
mysql> grant replication slave on *.* to ‘repl‘@192.168.10.36 identified by ‘yourpasswd‘;
刷新权限
mysql> flush privileges;
[root@xuegod5 ~]# mysqldump -uroot -pyourpasswd -B HA>HA2.sql
发送到xuegod6上
[root@xuegod6 ~]# mysql -uroot -pyourpasswd <HA2.sql
[root@xuegod6 ~]# vim /etc/my.cnf
server-id=3
log-bin=mysql-bin-slave2
binlog-format=row
重启服务:
[root@xuegod6 ~]# service mysqld restart
mysql> change master to master_host=‘192.168.10.35‘,master_user=‘repl‘,master_password=‘yourpasswd‘;
mysql> start slave;
mysql> create table mermber(id int(4) unsigned not null auto_increment,name varchar(20),primary key(id));
mysql> insert into mermber values(1,‘天屠‘),(2,‘孤叶‘);
2-16 mysql主从复制
标签:validate -- spec mysql 执行 出错 0 rows ade with