wkwanglei 2020-05-19
目标:搭建两台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 :/opt/mysql/backups
4、主库解锁
mysql>unlock tables;
从库操作:
1、停止从库slave
mysql>slave stop;
2、新建数据库cmdb
mysql> create database verymemory default charset utf8;
3、导入数据
[ ~]# mysql -uroot -ptest123 verymemory</opt/mysql/install/backups/verymemory.sql
4、查看从库已有该数据库和数据
此时主从库的数据完全一致,如果对主库进行增删改操作,从库会自动同步进行操作。
更多MySQL主从复制 相关机制将会在下篇文章持续更新...