mysql主从同步
1.1 mysql主从同步 工作原理
1.2 部署mysql主从同步
1.2.1 准备工作: 确保数据相同 从库必须要有主库上的数据。
1.2.1 配置mysql主从同步
1.2.1.1 配置主库 192.168.4.51
]# vim /etc/my.cnf
[mysqld]
server_id=51
log-bin=master51
:wq
]# systemctl restart mysqld
]# mysql -uroot -p密码
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
mysql> show master status;
1.2.1.2 配置从库 192.168.4.52
]# vim /etc/my.cnf
[mysqld]
server_id=52
:wq
]# systemctl restart mysqld
]# mysql -uroot -p密码
mysql> change master to master_host="192.168.4.51",master_user="repluser",master_password="123qqq...AA",master_log_file="master51.000001",master_log_pos=441;
mysql> start slave;
mysql> show slave status\G;
Master_Host: 192.168.4.51
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql> system cat /var/lib/mysql/master.info
1.2.1.3 测试主从同步配置
1 在主库51上添加访问数据的连接用户
]# mysql -uroot -p密码
mysql> create database db6;
mysql> grant all on db6.* to yaya@"%" identified by "123qqq...A"
;
2 客户端50 连接主库51 存储数据
]# mysql -h192.168.4.51 -uyaya -p123qqq...A
mysql> use db6;
mysql> create table t1(id int);
mysql> insert into t1 values(11),(99),(88)
;
3 从库52管理员本机登陆查看 , 有主库的数据
]# mysql -uroot -p密码
mysql> select * from db6.a;
1.4 把从库还原 为独立的数据库服务器。
[root@mysql52 mysql]# cd /var/lib/mysql
[root@mysql52 mysql]# rm -rf master.info
[root@mysql52 mysql]# rm -rf relay-log.info
[root@mysql52 mysql]# rm -rf mysql52-relay-bin.00000*
[root@mysql52 mysql]# rm -rf mysql52-relay-bin.index
[root@mysql52 mysql]# systemctl restart mysqld
[root@mysql52 mysql]# mysql -uroot -p密码
mysql> show slave status\G;
1.5 mysql主从同步常用配置项
1.5.1 写在主库/etc/my.cnf文件里的常用配置(对所有的从库有效)
]# vim /etc/my.cnf
[mysqld]
#binlog_do_db=gamedb 仅允许从库同步的库
binlog_ignore_db=bbsdb 不允许从库同步的库
:wq
]# systemctl restart mysqld
1.5.2 写在从库/etc/my.cnf文件里的常用配置(只对从库本机有效)
]# vim /etc/my.cnf
log_slave_updates
relay_log=中继日志文件名
#replicate_do_db=库名 //仅同步的库
replicate_ignore_db=库名 //只不同步的库
:wq
]# systemctl restart mysqld
1.6.3 配置mysql主从同步 主从从
51 52 53
主 从 从
配置从库53 仅同步主库 52 teadb 库数据
53 :
]# vim /etc/my.cnf
[mysqld]
replicate_do_db=teadb
:wq
]# systemctl restart mysqld
]# mysql -uroot -p密码
mysql> show slave status\G;
Replicate_Do_DB: teadb
配置主库51 只不允许 从库52 同步本机的 gamedb 库数据
]# vim /etc/my.cnf
[mysqld]
binlog_ignore_db=gamedb
:wq
]# systemctl restart mysqld
]# mysql -uroot -p密码
mysql> show master status\G
Binlog_Ignore_DB:gamedb
主从或主从从配置过程中可能出现的问题
一、数据库没有授权
对于mysql数据库没有授权,只需要用一条命令就可以了。
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
指点ip:%代表所有Ip,此处也可以输入Ip来指定Ip
输入后使修改生效还需要下面的语句
mysql>FLUSH PRIVILEGES;
二、服务器防火墙没有开放3306端口
centos 有两种防火墙 FirewallD和iptables防火墙
centos7 使用的是FirewallD防火墙。
FirewallD 是 iptables 的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面,在大多数 Linux 发行版的仓库中都有。与直接控制 iptables 相比,使用 FirewallD 有两个主要区别:
1.FirewallD 使用区域和服务而不是链式规则。
2.它动态管理规则集,允许更新规则而不破坏现有会话和连接。
FirewallD 是 iptables 的一个封装,可以让你更容易地管理 iptables 规则 - 它并不是 iptables 的替代品。虽然 iptables 命令仍可用于 FirewallD,但建议使用 FirewallD 时仅使用 FirewallD 命令。
1.FirewallD防火墙开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
命令含义:
–zone #作用域
–add-port=3306/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
重启防火墙
systemctl restart firewalld.service
2.iptables 开发3306端口
/sbin/iptables -I INPUT -p tcp -dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save