MySQL 是开源的关系型数据库系统。复制 (Replication) 是从一台 MySQL 数据库服务器(主服务器 master)复制数据到另一个服务器(从服务器 slave)的一个过程。
配置主服务器(Master)
1、编辑数据库配置文件 my.cnf, 个别在 /etc/ 目录下。
# 编辑 my.cnf
vi /etc/my.cnf
# 新增以下内容
server-id=211 # 惟一 id
log-bin=mysql-bin #启用二进制日志
binlog-do-db=aaa-te #要同步的 mstest 数据库, 要同步多个数据库,就多加几个 replicate-db-db= 数据库名
binlog-ignore-db=information_schema #要疏忽的数据库
replicate-ignore-db=mysql #要疏忽的数据库
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
配置从服务器(Slave)
# 编辑 my.cnf
vi /etc/my.cnf
# 新增以下内容
server-id=211 #id 惟一,不能与主服务器雷同
log-bin=mysql-bin #启用二进制日志
而后重启 Mysql (主从都重启)
service mysqld restart
设置
登录 mysql(主机)
mysql -uroot -p
赋予从库权限帐号,容许用户在主库上读取日志,赋予 192.168.1.2 也就是 Slave 机器有 File 权限,只赋予 Slave 机器有 File 权限还不行,还要给它 REPLICATION SLAVE 的权限才能够。
在 Master 数据库命令行中输出:
GRANT FILE ON *.* TO 'root'@'192.168.1.2' IDENTIFIED BY 'mysql password';
GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.1.2' IDENTIFIED BY 'mysql password';
FLUSH PRIVILEGES;
注:这里应用的仍是 root 用户作为同步的时候应用到的用户,能够本人设定。
查看主机状态
show master status;
mysql> show master status;
+------------------+----------+--------------+--------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------+-------------------+
| mysql-bin.000001 | 154 | aaa-te | information_schema | |
+------------------+----------+--------------+--------------------+-------------------+
登陆从 Mysql
在 Slave 机上验证对主机连贯
change master to master_host='192.168.1.1',master_user='root',master_password='passwd',master_log_file='mysql-bin.000001',master_log_pos=154;
启动 Slave
start slave;
查看从机状态
show slave status\G
注:Slave_IO 及 Slave_SQL 过程必须失常运行,即 YES 状态,否则都是谬误的状态(如:其中一个 NO 均属谬误)。
扩大
MySQL 主从复制几个重要的启动选项
- log-slave-updates log-slave-updates 这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不关上的,然而,如果这个从服务器 B 是服务器 A 的从服务器,同时还作为服务器 C 的主服务器,那么就须要开发这个选项,这样它的从服务器 C 能力取得它的二进制日志进行同步操作
- master-connect-retry master-connect-retry 这个参数是用来设置在和主服务器连贯失落的时候,重试的工夫距离,默认是 60 秒
- read-only read-only 是用来限度普通用户对从数据库的更新操作,以确保从数据库的安全性,不过如果是超级用户仍然能够对从数据库进行更新操作
- slave-skip-errors 在复制过程中,因为各种的起因,从服务器可能会遇到执行 BINLOG 中的 SQL 出错的状况,在默认状况下,服务器会进行复制过程,不再进行同步,等到用户自行来解决。Slave-skip-errors 的作用就是用来定义复制过程中从服务器能够主动跳过的谬误号,当复制过程中遇到定义的谬误号,就能够主动跳过,间接执行前面的 SQL 语句。–slave-skip-errors=[err1,err2,…….|ALL] 但必须留神的是,启动这个参数,如果处理不当,很可能造成主从数据库的数据不同步,在利用中须要依据理论状况,如果对数据完整性要求不是很严格,那么这个选项的确能够加重保护的老本
要革除 Slave,那么主机 mariaDB 中执行 reset slave all;
咱们晓得 mysql 主从同步能够选择性同步某几个数据库,并且要想实现这个目标能够借助如下几个参数:
- binlog-do-db= 须要复制的数据库名,如果复制多个数据库,反复设置这个选项即可。
- binlog-ignore-db= 不须要复制的数据库苦命,如果复制多个数据库,反复设置这个选项即可。
- replicate-do-db= 须要复制的数据库名,如果复制多个数据库,反复设置这个选项即可。
- replicate-ignore-db= 不须要复制的数据库名,如果要疏忽多个数据库,反复设置这个选项即可。