MySQL集群服务器的一些实验
具体有:
- MySQL主从备份。
- MySQL主主备份。
- MySQL一主多从
- MySQL多主一从
- MySQL中间件Amoeba
目标:理解原理,要会操作。
1、MySQL主从复制
为什么要主从备份:提高容灾能力,读写分离,读库与写库分开来。提高数据库的并发能力,避免锁。
主从同步的过程:1、master在执行sql产生binglog
2、slave从master机器上获取binlog,存在于relay-log中,然后从上次记住的位置起执行sql语句,一旦遇到错误则停止同步。
a、两台虚拟机master:192.168.109.2,slave:192.168.109.7
b、配置文件配置,如图:
修改从服务器的server-id=2;这个server-id只要保证不和主服务器是相同的就行了。
注意:上述操作完成后一定要重启MySQL,我就是没有重启,第一次做,找了挺久的。
c、对从服务器进行授权
grant replication slave on *.* to asd@'192.168.109.7' identified by '12345';
特别注意:我们这里是给asd这个用户在从远程登录主数据库读取MySQLbinlog的权限。因此需要在user表授予它权限【可以在从库用asd账户登录】。所幸,前面以及用grand命令了。
d、获取主服务器中binlog名字以及大小
show master status;
e、在从服务器中接收主服务器的授权
change master to master_user='ask',【前面设置的用户名】 master_password='12345',【前面设置的密码】 master_host='192.168.109.2',【主服务器ip地址】 master_log_file='mysql-bin.000053',【开始的文件大小】 master_log_pos=257;【开始的pos号码】
如图:【下面的图片不应该用root】
可以查看从服务器中/usr/local/mysql/data/master.info信息,如下图所示:
d、开启从服务器
start slave;
e、进行验证
show slave status;
如果Slave_IO_Running、Slave_SQL_Running下面的err信息没有错误,那么就是ok的,直接进入验证环节。否则要看后面错误的字段信息,比如,下面就是错误样例:
f、进入验证环节:
在主数据库上创建test_db。如下图:
查看从服务器是否有相同的数据:
实验成功。
问题:MySQL的从库重启后,会自动slave start么??
答案是是的:我自己把MySQL服务使用如下命名停掉又重启,发现主从复制会自动进行。
#/usr/local/mysql/bin/mysqladmin -h 127.0.0.1 -u root -p shutdown #/usr/local/mysql/bin/mysqld_safe &
2、MySQL主主备份
1、什么是主主备份?
答:MySQL主主备份,就是每台master既是master又是slave。这样,任何一方所做的变更,都会通过复制应用到另一方的数据库中,实现热切换。
MySQL主从备份与主主备份的区别:
1、MySQL主从备份对主操作数据,对从进行一个读取。如果对从进行操作数据,主不会同步数据,还可能造成数据紊乱。
2、主主则是无论对双方那个数据库进行操作,都会同步到对方去。
2、实战
环境:和主从备份的环境一样
a、配置主从的配置文件,主要在配置文件中开启mysql binlog以及其他优化选项,如图所示:
replicate-do-db=test binlog-ignore-db=mysql binlog-ignore-db=information_schema auto-increment-increment=2 auto-increment-offset=2
注意这个testdb,就是我们要同步的数据库了,主主同步只会对这个testdb是有效的。
a、重启主从的MySQL服务
#/usr/local/mysql/bin/mysqladmin -h 127.0.0.1 -u root -p shutdown #/usr/local/mysql/bin/mysqld_safe &
b、109.2向109.7授权,109.7接收授权
#授权 #grant replication slave on *.* to asd@'192.168.109.7' identified by '123456'; #show master status [查看自己的binlog信息,作为从服务器参数]
#109.7接收授权
#change master to master_user='asd',
master_password='123456',
master_host='192.168.109.2',
master_log_file='mysql-bin.000053',
master_log_pos=107;
c、109.7向109.2授权,109.2接收授权
#授权 #grant replication slave on *.* to asd@'192.168.109.2' identified by '123456'; #show master status [查看自己的binlog信息,作为从服务器参数] #109.7接收授权
#change master to master_user='asd',
master_password='123456',
master_host='192.168.109.7',
master_log_file='mysql-bin.000065',
master_log_pos=107;
d、109.2和109.7都执行start slave,并使用show slave status查看报错信息
e、进入test数据库,分别进行建表测试,测试成功,如下图:
3、MySQL一主多从
跟主从复制一样,这里不做,过多的描述