首先要有多臺服務器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
修改主庫數據測試,嗯。能夠完成同步。