一. Mysql讀寫分離 :Linux上配置,通過binlog進行主從同步
mysql主從複製,讀寫分離配置
1.主資料庫:
a.在主資料庫裡建立一個同步賬號
#每個從資料庫會使用一個MySQL賬號來連線主資料庫,所以我們要在主資料庫裡建立一個賬號,並且該賬號要授予 REPLICATION SLAVE 許可權,你可以為每個從資料庫分別建立賬號,當然也可以用同一個!)
#下面來建立一個賬號,賬號名:repl,密碼:123456,只允許192.168.1.的IP段登入,如下:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
#如果開發防火牆,可能要配置下埠,如下:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
b.配置主資料庫
#需要關閉MySQL和編輯my.cnf或者my.ini檔案,在 [mysqld] 節點下新增或修改配置。
vim my.cnf
#新增或修改配置以下內容:
log-bin=mysql-bin # 啟用二進位制日誌,日誌檔名以“mysql-bin”作為字首
server-id=1 # 如果不配置server-id或者配置值為0,那麼主伺服器將拒絕所有從伺服器的連線。
binlog-do-db=mstest # mstest是要同步的資料庫名稱
innodb_flush_log_at_trx_commit=1
sync_binlog=1
binlog-ignore-db=mysql # 要忽略的資料庫
#重啟mysql
mysql> show master status;
#執行上面命令記錄好File和Position,後面要用
2.從資料庫配置:
a.vim my.cnf
#新增或修改配置以下內容:
server-id=2 # 如果有多個從伺服器,每個伺服器的server-id不能重複,跟IP一樣是唯一標識,如果你沒設定server-id或者設定為0,則從伺服器不會連線到主伺服器。
replicate-do-db = mstest #在master端不指定binlog-do-db,在slave端用replication-do-db來過濾
replicate-ignore-db = mysql #忽略的庫
relay-log=mysqld-relay-bin
b.配置連線主伺服器的資訊
mysql> stop slave;
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.1.233',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000002', #配置主資料庫show master status的File
-> MASTER_LOG_POS=313; #配置主資料庫show master status的Position
mysql> start slave;
c.檢視從伺服器狀態
mysql> show slave status \G;
如果slave_io_running和slave_sql_running都為yes,那麼表明可以成功同步了
3.測試資料同步
測試,Navicat連線主伺服器 ,添加了表
然後再連線上 從伺服器mysql,發現也自己同步建立了該表即成功
備註:以上是以mysql5.5為例,而 MariaDB可能有點不同,
那些server—id的配置需要在 /etc/my.cnf.d/server.cnf 或者目錄下有名為 Data的名為 my.ini 的文字檔案 增加相關配置;
navicat 連線虛擬機器mysql連不上問題:
1.登陸mysql
#mysql -u root -p
2.修改mysql庫的user表,將host項,從localhost改為%。%這裡表示的是允許任意host訪問,如果只允許某一個ip訪問,
則可改為相應的ip,比如可以將localhost改為192.168.1.123,這表示只允許區域網的192.168.1.123這個ip遠端訪問mysql。
更改資料庫使用者許可權grant all privileges on portal.* to
mysql> use mysql;
mysql> grant all privileges on portal.* to [email protected] identified by 'root';
mysql> update user set host = '%' where user = 'root';
#若出現ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' 不予理會,繼續即可
mysql> flush privileges;