目标:搭建两台MySQL服务器,一台作为主服务器,一台作为从服务器,实现主从复制

环境:虚拟机

  主数据库:192.168.211.101

  从数据库:192.168.211.102

MySQL 安装可参考:逛一逛

一):主库配置步骤

1、配置主库:授权给从数据库服务器

mysql>GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.211.102' identified by 'root';
mysql>FLUSH PRIVILEGES;

2、修改主库配置文件,开启binlog,并设置server-id,每次修改配置文件后都要重启mysql服务才会生效

[mysqld]
# 同步的日志路径及文件名,一定注意这个目录要是mysql有权限写入的
log-bin=mysql-bin
# master端的ID号
server-id=1
# 要同步的mstest数据库,要同步多个数据库,就多加几个replicate-db-db=数据库名
binlog-do-db=verymemory
# 要忽略的数据库
#binlog-ignore-db=mysql

修改完配置后:重启MySQL服务     如果启动失败,通过cat /var/log/mysqld.log | tail -30  查看mysql启动失败的日志,从日志内容寻找解决方案。

3、查看主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 | 120 | verymemory | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

主服务器已配置好。

二):从库配置步骤

1、理所当然也是从配置文件着手,在/etc/my.cnf 添加下面配置:

[mysqld]
server-id=2
master-host=192.168.211.101
master-user=rep1
master-password=root
master-port=3306
replicate-do-db=verymemory
......

重启时报错:mysqld: unknown variable ‘master-host=

说明mysql不认识这些变量,原因是mysql5.5+版本主从复制不支持这些变量,需要在从库上用命令来设置:

CHANGE MASTER TO MASTER_HOST='192.168.211.101',MASTER_PORT=3306,MASTER_USER='rep1',MASTER_PASSWORD='root',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=120;

注意可能存在的错误:ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.

------------------------  ERROR  START  ------------------------

1、如果版本一样,请执行以下操作

vim /etc/my.cnf

#添加如下配置
log-bin=mysql-bin
server-id=2

2、如果版本不一样,请执行以下操作

原因:从 5.6.25 版本使用 innobackupex 备份,在 5.7.15 版本中应用恢复,ibd系统表需要重建

解决步骤:

1):drop 备份的 ibd表

#登录数据库
mysql -uroot -p
#使用mysql数据库
use mysql;
#删除
drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
drop table innodb_index_stats;
drop table innodb_table_stats;
#重建
source /app/mysql-5.7.25/share/mysql_system_tables.sql
#退出mysql
quit
#重启mysql
/etc/init.d/mysqld restart
或者service mysqld restart
注:这里根据自己的mysql路径进行修改即可

至此,问题解决,登陆数据库,重新 change master to 即可!

--------------- ERROR  END  -----------------

2、启动slave进程

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

3、查看slave的状态,如果下面两项值为YES,则表示配置正确:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

从库正在等待主库更新数据。。。Waitin for master to send event...

到此为止主库要有操作的话  就会同步到从库。

三):同步主库已有数据到从库 【根据个人情况选择 是否要操作以下步骤】

主库操作:

1、停止主库的数据更新操作

mysql>flush tables with read lock;

2、新开终端,生成主数据库的备份(导出数据库)

./mysqldump -h127.0.0.1 -uroot -proot verymemory > /opt/mysql/install/backups/verymemory.sql

3、将备份文件传到从库

scp /opt/mysql/install/backups/verymemory.sql root@192.168.211.102:/opt/mysql/backups

4、主库解锁

mysql>unlock tables;

从库操作:

1、停止从库slave

mysql>slave stop;

2、新建数据库cmdb

mysql> create database verymemory default charset utf8;

3、导入数据

[root@ops-dev ~]# mysql -uroot -ptest123 verymemory</opt/mysql/install/backups/verymemory.sql

4、查看从库已有该数据库和数据

此时主从库的数据完全一致,如果对主库进行增删改操作,从库会自动同步进行操作。

更多MySQL主从复制 相关机制将会在下篇文章持续更新...

最新文章

  1. JS IOS/iPhone的Safari不兼容Javascript中的Date()问题
  2. [原]ComFriendlyWaitForSingleObject
  3. jquery刷新页面
  4. String to Integer (atoi)
  5. mybatis 参数问题
  6. oracle 字符集
  7. java14 处理流
  8. Android开发手记(25) 简单Service的实现
  9. MySQL 通配符学习小结
  10. PCB的阻抗控制
  11. Qt HTTP请求同步调用
  12. Appium Android Bootstrap控制源代码的分析AndroidElement
  13. Android---App Widget(五)
  14. 深入理解计算机系统(1.1)------Hello World 是如何运行的
  15. .net之httphandler小记
  16. Oracle课程档案。第十一天
  17. [转]Angular 2 / 4 / 5 not working in IE11
  18. 完美解决Invalid layout of java.lang.String at value问题的方法
  19. Oracle11g口令过期的解决
  20. git怎么使用

热门文章

  1. 初学者的Pygame安装教程
  2. 五分钟学会Python装饰器,看完面试不再慌
  3. PHP 新特性:如何善用接口与Trait
  4. php://input和parse_str()使用
  5. 13206抢票代码 py
  6. php内置函数call_user_func()
  7. Android:finish()与System.exit(0)之间的区别
  8. 基于java的OpenCV安装和配置
  9. Crash日志解析
  10. 代码,绘画,设计常用的颜色名称-16进制HEX编码-RGB编码 对照一览表