1、mysql主从同步-->异步复制
1.1、主从互备
1.2、如何实现mysql主从读写分离:
中大型公司:通过程序(php,java)
小公司代理软件:mysql-proxy,amoeba
master(主库):IO线程,必须开启binlig(mysql-bin.000003 )
slave(从库):IO线程(取master中binlog到relay-log中继日志),sql线程(写relay-log中继日志的数据的)
总结:从库io线程扔返回的主库日志,sql进程实时处理,所以异步;
start slave开启同步-->-->从库IO向主库发起请求(主库验证)
-->从库接收主库返回的binlog日志信息(记录在从库IO线程下的relay-log中继日志)
2.2、授权在master库里用户能连接slave库
2.3、查看master库在加锁只读的状态下的Binlog,并对这个点的master做一个dump
2.4、把master的dump信息恢复到slave库里
2.5、登录slave库配置CHANGE MASTER TO保存到slave库的master info里
假设:主库 master 3306(改server-id,开binlog,授权slave中的用户允许连接master取binlog日志)
从库 slave 3307
#ps -ef|grep mysql(启动mysql数据库服务)
#/data/3306/mysql start(启动3306实例)
#/data/3307/mysql start(启动3307实例)
#ss -lnt|grep 330 (查看mysql实例是否正常启动)
3.1、master:
#vi /data/3306/my.cnf(1、打开log-bin,指定路径log-bin = /data/3306/mysql-bin,
2、确保server-id不一样,如server-id=1)
#egrep "log-bin|server-id" /data/3306/my.cnf(检查是否打开log-bin和确保server-id)
检查log-bin是否修改生效,打开binlog日志的两个方法:
1、#ll /data/3306(查看3306master下面是否产生bin-log,如:mysql-bin.000003)
2、#mysql -uroot -p123 -S /data/3306/mysql.sock -e "show variables like 'log_bin';"
slave里binlog可开可不开,如果做级联架构必须在slave里面开启binlog和设置log_slave_updates
#mysql -uroot -p123 -S /data/3306/mysql.sock(登录master)
mysql>grant replication salve on *.* to 'zdh'@'192.168.1%' identified by '123';(授权master库里的用户zdh能连接salve库,salve的网段是192.168.1)
mysql>flush privileges;(刷新到磁盘)
3.2、slave:
mysql>flush table with read lock;(给master表加锁,只读,在3306实例下,这个窗口不能断)
mysql>show master status;(查看master在上诉操作中只读这个点上的binlog)
#mysqldump -uroot -p'123' -S /data/3306/mysql.sock -A -B --events --master-data=2 >/opt/zdh.sql(在新窗口把master库dump到/opt/rep.sql)
mysql>show master status;(再看一次master里的binlog信息,确定在dump之后binlog是否改变,之前的锁表是否成功)
mysql>unlock tables;(master库解锁)
mysql>quit
#mysqldump -uroot -p'123' -S /data/3307/mysql.sock </opt/zdh.sql(把master库dump的信息恢复到salve库里)
#mysql -uroot -p'123' -S /data/3307/mysql.sock(登录slave库)
mysql>CHANGE MASTER TO
MASTER_HOST='192.168.1.105', (master主机ip)
MASTER_PORT=3306, (master端口)
MASTER_USER='zdh',
MASTER_PASSWORD='123',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=456;
(这个CHANGE MASTER TO的操作会放到master info里)
mysql>start slave;(开启slave同步)
mysql>show slave status\G(查看slave库里的sql和io进程是否yes,yes表示正常start同步,
结果出现Seconds_Behind_Master=0落后master库0秒表示正常)
3.3另一种mysql的主从同步:
在新窗口把master库dump到/opt/rep.sql时,把--master-data=2改成--master-data=1,然后
在CHANGE MASTER TO里面去掉MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=456这
两条信息,其他不变,即可;
1.1、主从互备
1.2、如何实现mysql主从读写分离:
中大型公司:通过程序(php,java)
小公司代理软件:mysql-proxy,amoeba
门户网站:分布式dbproxy(读写分离,hash负载均衡,健康检查)
master(主库):IO线程,必须开启binlig(mysql-bin.000003 )
slave(从库):IO线程(取master中binlog到relay-log中继日志),sql线程(写relay-log中继日志的数据的)
总结:从库io线程扔返回的主库日志,sql进程实时处理,所以异步;
start slave开启同步-->-->从库IO向主库发起请求(主库验证)
-->从库接收主库返回的binlog日志信息(记录在从库IO线程下的relay-log中继日志)
-->sql线程实时把relay-log信息写入-->更新从库IO线程的master info;
2.2、授权在master库里用户能连接slave库
2.3、查看master库在加锁只读的状态下的Binlog,并对这个点的master做一个dump
2.4、把master的dump信息恢复到slave库里
2.5、登录slave库配置CHANGE MASTER TO保存到slave库的master info里
2.6、在slave里开启start slave同步
假设:主库 master 3306(改server-id,开binlog,授权slave中的用户允许连接master取binlog日志)
从库 slave 3307
#ps -ef|grep mysql(启动mysql数据库服务)
#/data/3306/mysql start(启动3306实例)
#/data/3307/mysql start(启动3307实例)
#ss -lnt|grep 330 (查看mysql实例是否正常启动)
3.1、master:
#vi /data/3306/my.cnf(1、打开log-bin,指定路径log-bin = /data/3306/mysql-bin,
2、确保server-id不一样,如server-id=1)
#egrep "log-bin|server-id" /data/3306/my.cnf(检查是否打开log-bin和确保server-id)
检查log-bin是否修改生效,打开binlog日志的两个方法:
1、#ll /data/3306(查看3306master下面是否产生bin-log,如:mysql-bin.000003)
2、#mysql -uroot -p123 -S /data/3306/mysql.sock -e "show variables like 'log_bin';"
slave里binlog可开可不开,如果做级联架构必须在slave里面开启binlog和设置log_slave_updates
#mysql -uroot -p123 -S /data/3306/mysql.sock(登录master)
mysql>grant replication salve on *.* to 'zdh'@'192.168.1%' identified by '123';(授权master库里的用户zdh能连接salve库,salve的网段是192.168.1)
mysql>flush privileges;(刷新到磁盘)
3.2、slave:
mysql>flush table with read lock;(给master表加锁,只读,在3306实例下,这个窗口不能断)
mysql>show master status;(查看master在上诉操作中只读这个点上的binlog)
#mysqldump -uroot -p'123' -S /data/3306/mysql.sock -A -B --events --master-data=2 >/opt/zdh.sql(在新窗口把master库dump到/opt/rep.sql)
mysql>show master status;(再看一次master里的binlog信息,确定在dump之后binlog是否改变,之前的锁表是否成功)
mysql>unlock tables;(master库解锁)
mysql>quit
#mysqldump -uroot -p'123' -S /data/3307/mysql.sock </opt/zdh.sql(把master库dump的信息恢复到salve库里)
#mysql -uroot -p'123' -S /data/3307/mysql.sock(登录slave库)
mysql>CHANGE MASTER TO
MASTER_HOST='192.168.1.105', (master主机ip)
MASTER_PORT=3306, (master端口)
MASTER_USER='zdh',
MASTER_PASSWORD='123',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=456;
(这个CHANGE MASTER TO的操作会放到master info里)
mysql>start slave;(开启slave同步)
mysql>show slave status\G(查看slave库里的sql和io进程是否yes,yes表示正常start同步,
结果出现Seconds_Behind_Master=0落后master库0秒表示正常)
3.3另一种mysql的主从同步:
在新窗口把master库dump到/opt/rep.sql时,把--master-data=2改成--master-data=1,然后
在CHANGE MASTER TO里面去掉MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=456这
两条信息,其他不变,即可;