MySQL 主从复制

进入 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容