主页
关于
Stay before every beautiful thoughts
在每一个美好的思想前停留
文章
>
学习笔记
>
正文
MySQL 主从复制
MySQL
Created at 2021-07-16 23:23
# 进入 mysql 创建用户 ``` CREATE USER 'slave'@'%' IDENTIFIED BY 'flzx3qc1001' ``` # 查看用户信息 ``` select * from mysql.user where user='slave' \G ``` # 设置权限 ``` GRANT SELECT,REPLICATION SLAVE ON *.* TO 'slave'@'%'; ``` # 查权限是否设置成功 ``` select * from mysql.user where user='slave' \G ``` # 复制两个虚拟机 因为我是在虚拟机操作 所以只要复制就可以 # 同源策略,将主库的库文件复制到从库 注意,先要停止Mysql服务,主库从库都要停止。 ``` service mysql stop ``` 库位置/var/lib/mysql,mysql文件夹就是这个所有的库,需要把这个文件夹复制到从库。现将这个文件进行压缩。 ``` tar -zcvf mysql.tar.gz ./mysql/ ``` 首先进入从库,查看从库是否有了这个压缩文件,并进行移动到从库的/var/lib/ ``` cd /tmp/ mv mysql.tar.gz /var/lib/ ``` 将从库mysql文件夹进行备份,以防失败。 ``` cd /var/lib/ mv mysql mysql.bak ``` 将主库传过来的mysql.tar.gz 解压,这就完成了同源策略 ``` tar -zxvf mysql.tar.gz ``` 这时,就可以主从就都可以开启mysql服务了。 ``` service mysql start ``` # 配置主库和从库 ## 主库配置/etc/mysql/mysql.conf.d/mysqld.cnf ``` [mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M binlog-ignore-db=mysql //不进行主从复制的库 # 将bind-address注释,为了能够使用从库服务器IP登陆主库 #bind-address = 127.0.0.1 ``` ## 从库配置/etc/mysql/mysql.conf.d/mysqld.cnf ``` [mysqld] server-id = 2 log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M binlog-ignore-db=mysql ``` ## 修改完后重启数据库 ``` service mysql restart ``` # 查询主数据库状态 ``` mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 154 | | mysql | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) ``` ** 如果为空说明 数据库没重启。。 ** # 从库执行命令 ``` CHANGE MASTER TO MASTER_HOST='192.168.20.14', MASTER_USER='slave', MASTER_PASSWORD='flzx3qc1001', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; //CHANGE MASTER TO MASTER_HOST='192.168.20.14', MASTER_USER='slave', MASTER_PASSWORD='flzx3qc1001', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; ``` ## 参数解析 ``` MASTER_HOST:主服务器IP MASTER_USER:在主服务器中创建的帐号,slave MASTER_PASSWORD:自己定义的密码, flzx3qc1001 MASTER_LOG_FILE:上一步查看的 主服务器的FILE文件,mysql-bin.000001 MASTER_LOG_POS:上一步查看的 主服务器的Postion位置,笔者是154 ``` # 开始同步 从服务器执行 ``` START SLAVE; ``` # 停止复制 ``` STOP SLAVE; ``` # 查看状态 ``` SHOW SLAVE STATUS \G ``` # 发现有一个错误 ``` Last_IO_Errno: 1593 Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. ``` 意思是 主的UUID 和 从的UUID 不可以一样, 就是复制虚拟机的原因。。。 # 删除 从服务器的 UUID配置 文件地址 /var/lib/mysql/auto.cnf ``` # 切换目录 cd /var/lib/mysql # 重命名 mv auto.cnf auto.cnf.back # 重启服务 service mysql restart # 进入mysql 后 查看状态 SHOW SLAVE STATUS \G Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 ```