部署环境:
linux Centos 7
mysql8.0.21
服务器两台(一主一从) 192.168.121.10 (主库)、192.168.121.20 (从库)
数据库安装步骤参考上篇链接linux安装mysql详细教程(远程连接)_一朵纯洁的小白花的博客-优快云博客
两台服务器最好安装版本一致
开始部署
1、配置master主服务器的mysql
[root@localhost bin]# vim /etc/my.cnf
1.在[mysqlId]下新添加
server-id=10 //服务器唯一标识
log_bin=master-bin //启动MySQL二进制日志,即数据同步语句,从数据库会一条一条的执行这些语句
log_bin_index=master-bin.index
binlog_do_db=testdb //指定记录需要复制的数据库名称,如果复制多个数据库,重复设置这个选项即可
wq保存
2.在主服务器上创建从服务器的用户和权限
进入mysql数据库,命令如下 (mysql8.0之后分为两步)
1.创建一个远程用户
create user 'root8'@'从库ip' identified with 'mysql_native_password' by '密码';
2.赋予远程连接的权限
GRANT REPLICATION SLAVE ON *.* TO 'root8'@'从库ip';
3.刷新权限
FLUSH PRIVILEGES;
查看master信息(下面要用) show master status;
2、配置slave从服务器的mysql
1.在[mysqlId]下新添加
server-id=20 //服务器唯一标识
relay-log=slave-relay-bin //启动MySQL二进制日志,可以用来做数据备份和崩溃恢复,或主服务器挂掉了,将此从服务器作为其他从服务器的主服务器。
relay-log-index=slave-relay-bin.index
wq保存
重启service mysql restart
进入mysql命令行
输入命令连接master服务器
mysql> change master to master_host='Master服务器ip',master_port=3306,master_user='用户名',master_password='密码',master_log_file='master_bin.000004',master_log_pos=156;
Query OK, 0 rows affected, 2 warnings (0.09 sec)
解释:
change master to master_host='ip', // 你的Master服务器ip
master_port=3306, // 端口号
master_user='user', // 登陆的用户名
master_password='password' // 设置的密码
master_log-file='master-bin.000002', // 之前让你记住的file
master_log-pos=156 // 之前让你记住的position
启动slave
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
查看slave 状态
mysql> show slave status\G (后面没有分号)
只要 Slave_IO_Runging和Slave_SQL_Runing为Yse 就代表连接成功了
可以自己进行测试,主数据库新建个表,看看从数据库是否也有
常见错误之一:
Slave_IO_Running: No
我遇见的是因为数据偏移
解决办法:
先在主库执行:
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000005
Position: 156
Binlog_Do_DB:
Binlog_Ignore_DB: mysql,information_schema,performance_schema
Executed_Gtid_Set:
1 row in set (0.00 sec)
再在从库执行
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=156;
Query OK, 0 rows affected (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
验证,在从库执行
mysql> show slave status\G
两个都为Yes