首先要有多台服务器mysql
再者 一台主服务器写二进制文件sql
从服务器读取日志,更新本身的服务器。数据库
而后主从服务器搞定,ubuntu
好了,开始实操。centos
1,实验环境搭建, ubuntu +mysql 5.7 , centos + mysql 5.6服务器
2,主服务器创建2进制日志,每产生语句或磁盘变化,写进日志,ssh
从服务器创建 relaylog , 主服务器受权复制帐号,从服务器利用复制帐号来监听主服务器的日志ide
主: centos 192.168.231.131测试
从: ubuntu 192.168.231.136ui
# 主库配置 log_bin=szh-bin server-id=131 sync-binlog=1 binlog_do_db=plearnu binlog-format=mixed
root@ubuntu:/etc/mysql/mysql.conf.d# vi mysqld.cnf
# 从库配置 server-id = 136 #log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M #binlog_do_db = include_database_name #binlog_ignore_db = include_database_name binlog_do_db =plearnu binlog_ignore_db=mysql,test log_bin = /var/log/mysql/mysql-slave-bin.log
为啥要写server_id
应为不少时候从服务器可能又有从服务器,也就是说一台mysql 服务器多是主数据库,同时也是其余的从服务器。
因此要设置 server_id ,通常技术人员都喜欢那ip后三位写 id值
server_id=131
设置二进制日志, log-bin
log-bin=mysql-bin
binlog-format=mixed
binlog-format 二进制binlog日志的存储格式为混合类型
relay-log 是从库用来读取日志数据的地方
relay-log=mysql-relay
接下来须要设置 权限,让其余mysql服务器能够访问。
能够设置 192.168.*.* 可访问
>grant all on *.* to devs@"192.168.*.*" identified by '123456';
还须要开发受权 22 端口访问。
$ sudo apt-get install openssh-server
开发 3306 端口
发现3306端口未打开。
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉 bind-address ,意思是注释掉绑定ip的功能。开放 3306 端口。
开放 3306 端口,从新连接测试。
注意配置 主从的时候都要写在 [mysqld] 节点下面。不然不会生效。
mysql> change master to master_host='192.168.231.131',master_user='root',master_password='123456' ,master_log_file='szh-bin.000005',master_log_pos=106;
ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.
Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
use mysql
drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
drop table innodb_index_stats;
drop table innodb_table_stats;
root@ubuntu:/var/lib/mysql/mysql# ll *.ibd
-rw-r----- 1 mysql mysql 98304 Nov 8 15:24 engine_cost.ibd
-rw-r----- 1 mysql mysql 98304 Nov 8 15:24 gtid_executed.ibd
-rw-r----- 1 mysql mysql 114688 Nov 8 15:24 help_category.ibd
-rw-r----- 1 mysql mysql 245760 Nov 8 15:24 help_keyword.ibd
-rw-r----- 1 mysql mysql 131072 Nov 8 15:24 help_relation.ibd
-rw-r----- 1 mysql mysql 9437184 Nov 8 15:24 help_topic.ibd
-rw-r----- 1 mysql mysql 98304 Nov 8 15:24 plugin.ibd
-rw-r----- 1 mysql mysql 98304 Nov 8 15:24 server_cost.ibd
-rw-r----- 1 mysql mysql 98304 Nov 8 15:24 servers.ibd
-rw-r----- 1 mysql mysql 98304 Nov 8 15:24 slave_relay_log_info.ibd
-rw-r----- 1 mysql mysql 98304 Nov 8 15:24 time_zone.ibd
-rw-r----- 1 mysql mysql 98304 Nov 8 15:24 time_zone_leap_second.ibd
-rw-r----- 1 mysql mysql 98304 Nov 8 15:24 time_zone_name.ibd
-rw-r----- 1 mysql mysql 98304 Nov 8 15:24 time_zone_transition.ibd
-rw-r----- 1 mysql mysql 98304 Nov 8 15:24 time_zone_transition_type.ibd
root@ubuntu:/var/lib/mysql/mysql# rm -rf *.ibd
重启 mysql
sudo service mysql restart
删掉错误的表后,须要重建新表
sql地址在 lc-messages-dir = /usr/share/mysql
lc-messages-dir 选项中。
mysql>source /usr/share/mysql/mysql_system_tables.sql
再次执行语句,指定主库配置,在主库中执行 show master status; 能够知道 pos 参数和 log_file 参数。
mysql> change master to master_host='192.168.231.131',master_port=3306,master_user='root',master_password='root',master_log_file='szh-bin.000012',master_log_pos=120;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
查看从库状态
mysql> show slave status\G
若是要修改 slave 须要 先
mysql > stop slave;
mysql> change master to master_host='192.168.231.131',master_port=3306,master_user='root',master_password='root',master_log_file='szh-bin.000014',master_log_pos=120;
如何知道主从是否配置成功
mysql> show slave status\G
若是
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
都是 Yes 那么成功,若是不是,那么检查配置,检查发现有个选择项没有配置
binlog_ignore_db=mysql,test
备份和不须要备份的库都要写清楚才行。
开始测试,先关闭从库同步功能,导初始数据,保证数据一致先,而后
mysql> stop slave;
mysql> show master status;
查看主库信息,从新写从库配置
mysql> change master to master_host='192.168.231.131',master_port=3306,master_user='root',master_password='root',master_log_file='szh-bin.000013',master_log_pos=120;
开启同步
mysql> start slave;
mysql> show slave status\G
修改主库数据测试,嗯。能够完成同步。