主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制时,一个服务器充当主服务器(master),其余服务器充当从服务器(slave),因为复制是一异步进行的,所以从服务器不需要一直连着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
2、使用主从同步有什么好处
2.1 通过增加从服务器可以提高数据库的性能。主服务器上可以进行写入和 更新,从服务器呢可以向外提供读功能,这样就可以动态的调整从服务器的数量,从而调整整个数据库的性能。
2.2 提高数据安全。因为数据已经复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据。
2.3 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能。
3、主从同步的机制
MySQL服务器之间的主从同步时基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。
在使用二进制日志时,主服务器的所有操作都会被记录下来,然后从服务器会接收到该日志的一个副本,从服务器可以指定执行该日志中的那一类事件(譬如只插入数据或者只更新数据),默认会执行会执行日志中的所有语句。
每一个从服务器会记录关于二进制日志的信息:文件名和已经处理过的语句,这样意味着不同的从服务器可以分别执行同一个二进制日志的不同部分,而且从服务器可以随时连接或者中断和主服务器的连接。
主服务器和每一个从服务器都必须配置一个唯一的ID号(在my.cnf文件的[mysqld]模块下有一个server-id配置项),另外,每一个从服务器还需要通过CHANGE MASTER TO语句来配置它要连接的主服务器的ip地址,日志文件名称和该日志里面的位置(这些信息存储在主服务器的数据库里)
3、配置主从同步的基本步骤
3.1 主机需要开启二进制文件记录 和 配置 独立的ID编号。(sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 下修改)
3.1.1 在配置文件中修改server-id 和 bin-log 配置信息之后,需要重启服务器。
3.1.2 sudo service mysql restart
3.2 主机需要配置独立的ID编号
3.2.1 在配置文件中修改server-id
3.2.2 sudo service mysql restart
在做主从配置前需要保证从机的数据库和主机的数据是一致的。
3.3 将主服务器ubuntu上进行备份,执行命令:
mysqldump -uroot -p密码 --all-databases --lock-all-tables > ~/Desktop/master_db.sql
说明 : -u : 用户名 -p : 密码 --all-databases : 导出所有数据库
--lock-all-tables : 执行操作时锁住所有表,防止操作时有数据修改。
~/master_db.sql : 导出的备份数据,位置可自己指定。
3.4 scp (远程拷贝和粘贴)
scp /home/python/Desktop/master_db.sql 主服务器名@主服务器ip地址:/home/python/Desktop
进行操作之前先SSH 连接
3.5 在从机上完成数据的备份
mysql -uroot -p < master_db.sql
3.6. 登陆主机服务,创建一个账户,让所有的从机都能够使用这个账户登录到主机,完成数据的赋值。
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave' ;
3.6.1 刷新权限: FLUSH PRIVILEGES;
3.7 SHOW MASTER STATUS; 记录主机基本信息
3.8 在从服务器中设置,需要隶属许哪一个主机
change master to master_host='192.168.40.118', master_user='slave', master_password='slave',master_log_file='mysql-bin.000029', master_log_pos=583;
3.9 注: 如果配置失败,在配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf)中错误日志的路径(/var/log/mysql/error.log), 查看错误日志。
3.10 查看日志文件最后一段信息在百度搜索 mysql 1593 uuid 关键词, 得到解决问题的方法: 修改数据目录(/var/lib/mysql/auto.cnf) 将uuid 修改一个字符即可
3.11 重启从机服务 sudo service mysql restart
3.12 stop slave
3.13 change master to master_host='192.168.40.118', master_user='slave', master_password='slave',master_log_file='mysql-bin.000029', master_log_pos=583;
3.14 start slave
这样基本上能完成 MySQL主从的配置了。