原理:
从服务器的io线程连接主服务器获取二进制日志,并在本地保存为中继日志,
接着通过sql线程来在执行中继日志中的sql语句,
从而使从库和主库保持一致。
实验拓扑:
|-----192.168.2.1 主(vm1)master
---------rhel6.5---------|
|-----192.168.2.2 从(vm1) slave
实现功能:从数据库同步主数据库
配置过程:
1、公共配置
2、master配置
3、slave配置
4、测试同步
【公共配置】
主从安装mysql数据库
#yum -y install mysql-server #安装mysql服务
#service msyqld start #启动服务
#setenforce 0 #关闭selinux
#service iptables stop #关闭防火墙
【master配置】
1、配置master的配置文件/etc/my.cnf,供同步使用。
#cat /etc/my.cnf
...
[mysqld]
log-bin //打开log-bin文件
server-id=1 //数据库二进制日志,0.. ..
2、查看重启服务
[root@localhost ~]# mysql -uroot -pwsyht123 -e show variables like ‘log_bin’; #查看有没有开启log-bin+---------------+-------+| variable_name | value |+---------------+-------+| log_bin | on |+---------------+-------+[root@master ~]# service mysqld restart
3、主服务器端建立同步测试数据库
创建库和表、在master服务器上授权一个用户可以从slave 服务器上连接自已,且有拷贝数据的权限
[root@master ~]# mysql -uroot -pwsyht123mysql> grant replication slave on *.* to 'wsyht'@'192.168.2.%' identified by '123456';mysql> flush privileges; #刷新权限mysql> flush table with read lock; #读锁,不让别的用户往里写,当前窗口还不能断mysql> show master status; #查看master状态+------------------+----------+--------------+------------------+| file | position | binlog_do_db | binlog_ignore_db |+------------------+----------+--------------+------------------+| mysql-bin.000028 | 107 | | |+------------------+----------+--------------+------------------+1 row in set (0.00 sec)mysql> show databases; #查看master当前数据库有什么库+--------------------+| database |+--------------------+| information_schema || d1 || mysql || performance_schema |+--------------------+5 rows in set (0.00 sec)
4、备份当前所有库所有表(克隆多一个窗口进行如下操作)
[root@master ~]# mysqldump -uroot -pwsyht123 -a -b --events > /opt/all.$(date +%f).sql #开多一个窗口进行全库备份
5、拷贝备份文件到slave从服务器
[root@master ~]# rsync -avzp -e ssh -p 22 /opt/all.$(date +%f).sql [email protected]:/opt/
【slave配置】
1、修改server-id号
[root@slave ~]# cat /etc/my.cnf
[mysqld]
...
server-id=2
...
2、重启服务
[root@slave ~]# mysql -uroot -pwsyht123 -e show variables like 'log_bin'; #查看有没有开启log-bin
[root@slave ~]# service mysqld restart
3、导进数据库
[root@slave ~]# mysql -uroot -pwsyht123 -e show databases; #查看当前slave有什么库+--------------------+| database |+--------------------+| information_schema || mysql || performance_schema |+--------------------+3 rows in set (0.00 sec)[root@slave ~]# mysql -uroot -pwsyht123 quit
5、建立同步账户的信息
[root@slave ~]# mysql -uroot -pwsyht123mysql> change master tomaster_host='192.168.2.1', #连接的主机master_user='wsyht', #连接同步master的账户master_password='123456', #连接同步master的密码master_log_file='mysql-bin.000028', #master的现记录的日志文件master_log_pos=107; #master记录的日志点mysql> start slave;mysql> show slave status\g;*************************** 1. row *************************** slave_io_state: waiting for master to send event master_host: 192.168.2.1 master_user: wsyht master_port: 3306 connect_retry: 60 master_log_file: mysql-bin.000028 #master正在使用的日志文件 read_master_log_pos: 107 #master正中使用的日志点 relay_log_file: mysql-relay-bin.000002 #slave正使用的中继日志文件 relay_log_pos: 253 #slave中继日志文件的日志点 relay_master_log_file: mysql-bin.000028 slave_io_running: yes #io线程呈yes为正常 slave_sql_running: yes #sql线程呈yes为正 replicate_do_db: replicate_ignore_db: replicate_do_table: replicate_ignore_table: replicate_wild_do_table: replicate_wild_ignore_table: last_errno: 0 last_error: skip_counter: 0 exec_master_log_pos: 107 relay_log_space: 409 until_condition: none until_log_file: until_log_pos: 0 master_ssl_allowed: no master_ssl_ca_file: master_ssl_ca_path: master_ssl_cert: master_ssl_cipher: master_ssl_key: seconds_behind_master: 0master_ssl_verify_server_cert: no last_io_errno: 0 last_io_error: last_sql_errno: 0 last_sql_error: replicate_ignore_server_ids: master_server_id: 11 row in set (0.00 sec)
error:
no query specifiedmysql> show databases; #查看slave当前数据库有什么库+--------------------+| database |+--------------------+| information_schema || d1 || mysql || performance_schema |+--------------------+5 rows in set (0.00 sec)
【测试同步】
1)master配置
1、解锁
mysql> unlock tables; #解锁表,主库从新提供服务
2、创建新库
mysql> create database test; #创建test数据库测试同上海query ok, 1 row affected (0.00 sec)mysql> show databases; #查看master当前数据库有什么库+--------------------+| database |+--------------------+| information_schema || d1 || mysql || performance_schema || test |+--------------------+6 rows in set (0.00 sec)
2)slave配置
1、查看有没有同步数据库
mysql> show databases; #查看slave当前数据库有什么库+--------------------+| database |+--------------------+| information_schema || d1 || mysql || performance_schema || test |+--------------------+6 rows in set (0.00 sec)
#看到上面slave表的信息可看到有test,主从同步成功,实验完成