Mysql8.0 开启主从复制
mysql replication 可以将一个 mysql 数据库服务器(主库)中的数据复制到一个或多个 mysql 数据库(从库)中。
主从复制有如下优点:
1.水平解决方案:将负载分散到多个从库以提高性能。所有的写入和更新都必须在主库上进行,读操作在一个或多个从库中进行,这样可以提高数据库的写入性能(主库只负责写入与更新),同时对于多个从库来说也能显著增加查询性能。
2.数据安全性:因为数据复制到从库,而且从库可以暂停复制过程,所以可以在从库上运行备份服务而不会损坏相应的主库数据。
3.分析:在主库上可以实时创建数据,而对信息的分析可以在从库上进行,不会影响主库的性能。
4.远程数据分发:可以使用复制为远程服务器站点创建本地数据的副本,无需永久访问主库。
Master 设置
1.首先修改 my.cnf 文件,在mysqld
块中加入一条server_id
,一般为服务器 ip 的最后一位数字
2.开启二进制日志,同样在mysqld
块中加入一条log-bin
,名称自定
3.指定二进制日志的格式,binlog-fomat
,mixed|row|statement
配置如下:
[mysqld] ... server-id=151 log-bin=master1_mysql_bin_log binlog-format=mixed ...
然后我们重启 mysqld 进程
[root@centos8 ~]# /etc/init.d/mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQL.... SUCCESS!
4.在 master 上需要创建一个用户,赋予REPLICATION SLAVE
和REPLICATION CLIENT
权限,从库使用此账户链接到主库
mysql>CREATE USER 'master1slave'@'%' IDENTIFIED WITH mysql_native_password BY '111111'; mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'master1slave'@'%'; mysql>FLUSH PRIVILEGES;
接下来执行 show master status
,看到如下内容则表示 master 设置完成。
mysql> show master status; +------------------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------------------+----------+--------------+------------------+-------------------+ | master1_mysql_bin_log.000001 | 156 | | | | +------------------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
Slave 配置
1.同样在my.cnf
中加入server-id
2.在my.cnf
中打开中继日志relay-log
并指定relay-log
为只读
[mysqld] ... server-id=110 relay-log=mysql-relay read-only=1 ...
3.重启 mysqld 进程
Mysql 主从链接
1.首先需要在主库上备份所有数据库,在从库上全量恢复备份,使主从数据库一致
#在主服上 mysqldump -uroot -p111111 --all-databases --routines --events --single-transaction --master-data > dump.sql
#在从服上 mysql -uroot -p111111 -f < dump.sql
2.执行以下命令告诉从服链接哪个主服
mysql>change master to ->master_host='192.168.123.151', ->master_user='master1slave', ->master_password='111111', ->master_log_file='master1_mysql_bin_log.000001', ->master_log_pos=156; Query OK, 0 rows affected (0.20 sec)
3.开启 slave
mysql>start slave;
接下来看一下链接情况,show slave status
,显示如下则表示链接成功!
mysql> show slave status \G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.123.151 Master_User: master1slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master1_mysql_bin_log.000001 Read_Master_Log_Pos: 2161 Relay_Log_File: mysql-relay.000002 Relay_Log_Pos: 2341 Relay_Master_Log_File: master1_mysql_bin_log.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes ... ...
至此主从复制就配置好了!