mysql主從庫同步數據配置

首先要有多臺服務器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

修改主庫數據測試,嗯。能夠完成同步。

 

相關文章
相關標籤/搜索