CentOS7 下搭建MySQL主从数据库

1.实验环境,数据库的安装https://www.cnblogs.com/luohanguo/p/9045391.html

  我的数据库是分开装的,先拷贝了虚拟机在装的数据库,若果是数据库装好后拷贝好像uuid是一样的,所以会有点问题,不过网上有方法我看见了。

角色 IP OS/MySQL版本 有无应用数据
主数据库 192.168.129.128 CentOS7/5.7
从数据库 192.168.129.129 CentOS7/5.7

2.主从复制的原理

  从库生成两个线程,一个I/O线程,一个SQL线程;i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

  --来自https://blog.csdn.net/php_younger/article/details/59673879

3.用途

  1)灾备

  2)读写分离

  3)数据备份

4.差不多MySQL也装好了,开始配置环境

  首先vim /etc/my.cnf,在里面添加(参数都很容易读懂(:就不解释了

log_bin=master-bin
server-id=10086 #不要和别的冲突
expire-logs-days=7
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performation_schema
binlog_ignore_db=sys

  重启mysql服务,service mysqld restart,进入mysql然后show master status; 这两个值下面要用

  为你的从数据库添加用户,密码有要求,不会就Google        Orz

GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.129.%' identified by ‘password’;

  这时你可以去从数据库那台虚拟机,然后输入下面去尝试连接主数据库,如果连不了可能是Firewall

mysql -h 主库的ip -P 端口 -u repl -p

  试试下面的和3306做朋友

# 看看你的mysql端口开了没
firewall-cmd --list-all 
# 没有就
firewall-cmd --permanent --add-port=3306/tcp
# 重启
service firewalld restart
# 应该是有了
firewall-cmd --query-port=3306/tcp

  在连接下远程数据库,不出意外是可以的!

  在从数据库那机子上的/etc/my.cnf里输入

server-id = 10087
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index

  重启服务,然后进入MySQL,然后

# 执行同步SQL语句
change master to
master_host='192.168.129.128',
master_port=3306, master_user='repl', master_password='密码', master_log_file='master-bin.000001', master_log_pos=上面那个position;

  再start slave;    你可以在输入show slave status G查看状态,如果这两个是true就意味着同步了

  试试啊,去主库闯将数据库,表,添加属性,删除什么的,再去边上瞅瞅,同步了就是ok了

5.上面已经弄好了,数据库也同步了,那主从复制有什么用呢?

   简单来说,主从复制适合与读多写少的场景,比如这样一个简单的架构相对于单库可用性,性能,容灾都有提升(这就是钞能力吧):

6.主从数据库可能会发生不一致的问题,那怎么解决呢?

  发生不一致的场景:https://www.2cto.com/database/201702/593470.html

  简单的解决方法:https://www.cnblogs.com/lixiansen/p/5667340.html

  解决方法,划重点,常备份

  6.1 锁库,flush table with read lock;

  6.2 用mysqldump -h 主机名 -P 端口 -u 用户 -p --databases 数据库名 > XXX.sql来备份一个sql文件

  6.3 scp文件名 root@从库ip:/存储路径     再输入你那个root用户的密码

  6.4 查看主库master的状态file,position

  6.5 stop slave; set sql_log_bin=0;

  6.6 source你传过来的sql文件

  6.7  set sql_log_bin=1; flush privileges;

  6.8 重启下service,不知道有没有用

  6.9 设置从库同步,就是那个change master to 再来一遍,记得和6.4的master状态一样

  6.10 start slave; 

  6.11 show slave status G;

两个都是yes就好了,又同步了!

 

原文地址:https://www.cnblogs.com/KuroNJQ/p/11181775.html