MySQL數據管理6
環境準備
從一定要有主庫比自己多個的數據
systemctl stop firewalld
setenforce 0
物理連接能通
配置主數據庫服務器
1 用戶授權
grant replication slave on *.* to plj@"%" identified by "123456";
2 修改配置文件
vim /etc/my.cnf
server_id=12
log_bin=master12
log_format="mixed"
:wq
3 重啟數據服務
systemctl restart mysqld
4 查看當前使用的 binlog日誌信息
mysql -uroot -p123123
mysql> show master status;
配置從數據庫服務器
1 驗證主庫授權用戶
mysql -h192.168.4.12 -uplj -p123456
mysql>
2 修改配置文件
vim /etc/my.cnf
server_id=11
log_bin=slave11 #可選
log_format="mixed"
:wq
3 重啟數據服務
systemctl restart mysqld
4 管理員登錄把自己指定為從數據庫服務器
mysql -uroot -p654321
mysql> show slave status\G;
mysql> change master to master_host="192.168.4.12",master_user="plj",master_password="123456",master_log_file="master12.000001",master_log_pos=154;
5 啟動slave 進程
mysql> start slave;
6 查看slave 進程狀態信息
mysql> show slave status\G;
slave_io_running: yes
slave_sql_running: yes
驗證主從同步配置
客戶端訪問主數據庫服務器,創建庫 表記錄 ,在從數據服務器上也能夠看到
主從同步工作原理
slave_io_running: 把主數據庫服務器上binlog日誌裏的sql 存放到本機的中繼日誌文件裏。
Last_IO_Error: 報錯信息
出錯原因: 從服務器連接不上主數據庫服務器
ping firewalld selinux
change master to 的配置信息錯誤。
slave_sql_running:執行本機中繼日誌文件裏的sql命令。
Last_SQL_Error: 報錯信息
mysql>stop slave;
mysql>change master to 選項=值,選項=值;
mysql>start slave;
cd /var/lib/mysql/
master.info 連接主數據庫服務器的信息
relay-log.info 中繼日誌文件
localhost-relay-bin.xxxxxx 中繼日誌文件
localhost-relay-bin.index 中繼日誌索引文件
把一臺數據庫服務器恢復為獨立的數據庫服務器。
#cd /var/lib/mysql
#rm -rf master.info relay-log.info localhost-relay-bin.*
#systemctl restart mysqld
讓從數據庫服務器臨時不同步數據(想同步再啟動就可以了)
mysql>stop slave ;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
day06
mysql主從同步結構模式
一主一從
一主多從
主從從
主主結構(互為主從)
+++++++++++++++++++++++++++++
mysql主從同步配置參數
主數據庫服務器使用的配置參數
/etc/my.cnf
[mysqld]
binlog_do_db=數據庫名,數據庫名 #只允許同步的庫
binlog_ignore_db=數據庫名,數據庫名 #只不允許同步的庫
:wq
#systemctl restart mysqld
從數據庫服務器使用的配置參數
/etc/my.cnf
[mysqld]
log_slave_updates # 允許級聯復制
relay_log=名 #中繼日誌文件名
replicate_do_db=數據庫名,數據庫名 #只同步的庫
replicate_ignore_db=數據庫名,數據庫名 #只不同步的庫
:wq
#systemctl restart mysqld
++++++++++++++++++++++++++++++
中間件maxscale
讀寫分離 (maxscale + mysql主從同步)
maxscale-2.1.2-1.rhel.7.x86_64.rpm
需求 在主機192.168.4.10配置讀寫分離服務,客戶端連接後,
把執行的查詢請求分配給192.168.4.11主機,執行的寫請求分
配給192.168.4.12主機,
配置
1 把11 主機配置為12的從數據庫服務器
2 在主機10運行實現讀寫分離功能的服務maxscale
2.1 安裝軟件包
rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm
2.2 修改配置文件
# sed -i '/#/d' /etc/maxscale.cnf
# vim /etc/maxscale.cnf
[root@localhost ~]# cat /etc/maxscale.cnf
[maxscale]
threads=1
[server1]
type=server
address=192.168.4.12
port=3306
protocol=MySQLBackend
[server2]
type=server
address=192.168.4.11
port=3306
protocol=MySQLBackend
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=scalemon
passwd=111111
monitor_interval=10000
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale
passwd=111111
max_slave_connections=100%
[MaxAdmin Service]
type=service
router=cli
[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=6606
[root@localhost ~]#
配置文件說明
0 設置服務運行啟動的線程數量
[maxscale]
1 數據庫服務器成員 [server1] [server2]
2 監控數據庫服務器成員列表 [MySQL Monitor]
user=scalemon //用戶名
passwd=111111 //密碼
3 指定在那些數據庫服務器之間做讀寫分離
[Read-Write Service]
user=maxscale //用戶名
passwd=111111 //密碼
4 定義管理服務
[MaxAdmin Service]
5 讀寫分離服務監控的端口號
[Read-Write Listener]
6 指定管理服務監聽的端口號
[MaxAdmin Listener]
2.2根據配置文件的設置添加授權用戶(12 11)
scalemon用戶
grant replication slave, replication client on *.* to scalemon@"%" identified by “111111”; //創建監控用戶
maxscale用戶
grant select on mysql.* to maxscale@'%' identified by "111111”; //創建路由用戶
2.4 啟動maxscale
#maxscale -f /etc/maxscale.cnf
#netstat -utnalp | grep :4006
#netstat -utnalp | grep :6606
#maxadmin -uadmin -pmariadb -P6606
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.4.12 | 3306 | 0 | Master, Running
server2 | 192.168.4.11 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
MaxScale>quit
[root@localhost ~]#
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
在主從數據庫服務器上客戶端訪問數據時使用的連接用戶
mysql>grant all on *.* to student@"%" identified by
"123456";
客戶端訪問
#which mysql
#mysql -h192.168.4.10 -P4006 -ustudent -p123456
mysql>select ----> 11 從
mysql>insert ----> 12 主
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mysql性能調優
數據庫服務器處理客戶端的訪問速度特別慢,可能是由哪些原因
造成的?
1 網絡帶寬不夠
2 服務器配置太低
3提供數據庫服務軟件版本低
查看服務運行時的運行參數(變量)
mysql -uroot -p123123
mysql> show variables like "%關鍵字%";
mysql> set [GLOBAL] 變量名=值;
vim /etc/my.cnf
[mysqld]
變量=值
:wq
並發連接數
max_connections
mysql> show global status like "%max_used_conn%";
Max_used_connections/max_connections=0.85 * 100%
連接超時時間
mysql>show variables like "%timeout%";
connect_timeout=10
wait_timeout=28800
允許保存在緩存中被重用的線程數量
thread_cache_size=10
為所有線程緩存的打開的表的數量
table_open_cache =3
查詢緩存參數設置?
mysql> show variables like "query_cache%";
query_cache_type=0/1/2
1 select * from t1; <1m
2 select in_sql_cache * from t1;
query_cache_wlock_invalidate off
對myisam 存儲引擎有效。
pc1 select name from t1 where name="jim";
name=jim
pc2 select name from t1 where name="jim";
pc3 update t1 set name="tom" where name="jim";
顯示查詢緩存統計信息
mysql>show global status like "qcache%";
4程序員編程程序有問題(訪問數據是編寫的sql命令復雜導致處
理速度慢)
mysql服務支持4種日誌文件:
錯誤日誌 binlog 查詢日誌 慢查詢日誌
默認開啟
查詢日誌:客戶端連接服務器後執行的所有的sql命令。
general-log
general-log-file=目錄/名
默認存儲位置和名稱
cat /var/lib/mysql/主機名.log
慢查詢日誌 :客戶端連接服務器後,記錄超過指定時間(默認
10秒)顯示查詢結果的sql命令。
slow-query-log
slow-query-log-file=目錄/名
long-query-time=3
默認存儲位置和名稱
mysql> select sleep(11);
cat /var/lib/mysql/主機名-slow.log
# mysqldumpslow localhost-slow.log > /tmp/sql.err
4程序員編程程序有問題(訪問數據是編寫的sql命令復雜導致處理速度慢)
啟用慢查詢日誌 ,記錄超過指定時間顯示查詢結果的sql命令
5網絡結構有問題
MySQL數據管理6