2019年6月4日星期二

Max_connections 214 4.15.0-46-generic#49-Ubuntu

因此,max_connections從my.cnf文件中設置的值下降到214的問題在Ubuntu上已經存在了一段時間。

作為一個例子,它在2015年被注意到



我最近又碰到了這個,並通過以下步驟解決了。


# cp /lib/systemd/system/mysql.service /etc/systemd/system/
# cd /etc/systemd/system/
# vi mysql.service

LimitNOFILE=infinity
LimitMEMLOCK=infinity

# systemctl daemon-reload
# systemctl restart mysql


完成這些步驟後,MySQL連接在my.cnf文件中的給定參數處穩定。

2019年4月15日星期一

簡單的KeepaliveD設置

因此,keepalived已經存在了很長一段時間......但是對許多人來說這仍然是一個謎。
所以這是一個非常簡單的例子,說明keepalived如何與MySQL一起工作。 希望這可以幫助那些有疑問的人。

我們將有一個簡單的主設備到奴隸設置。 意思是..我們寫一個,除非我們故障轉移到第二個事件。

1 - 安裝keepalived


#yum搜索keepalived
keepalived .x86_64:負載均衡器和高可用性服務

  僅限名稱和摘要匹配,對所有內容使用“全部搜索”。
#yum -y install keepalived

你現在應該有一個配置文件

#ls -ltr /etc/keepalived/keepalived.conf  

保留原件,因為你總是備份..右....
#cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.orig

因此,您需要找出可用於虛擬IP的ipaddress。 我為這個例子選擇了192.168.0.123。

接下來,我們將設置一個腳本用於我們的新配置文件。

我在這裡做的一些事情......
我在/ etc / keepalived中留下了一個.cnf文件,用於keepalived和一個日誌。
這使得示例變得簡單,因此您可以執行此操作或使用您自己的cnf文件。

一個腳本:

cat /etc/keepalived/keepalived_check.sh  
#!/斌/慶典

#monitor mysql status

#如果這個節點mysql死了

#並且它的奴隸還活著,然後停止它的keepalived。 另一個節點將綁定IP。



export MYSQL_HOME = / etc / keepalived /

export PATH = $ MYSQL_HOME / bin:$ PATH



的MySQL =“/ USR / bin中/ MySQL的”

中mysqladmin =“的/ usr /斌/中mysqladmin”

delay_file =“$ MYSQL_HOME / slave_delay_second.log”

slave_host = $ 1





ALIVE = $($ mysqladmin --defaults-file = $ MYSQL_HOME / .my.localhost.cnf   ping | grep alive | wc -l);

REMOTEALIVE = $($ mysqladmin --defaults-file = $ MYSQL_HOME / .my.remotehost.cnf   ping | grep alive | wc -l);



如果[[$ ALIVE -ne 1]]

然後

#echo“MySQL已關閉”

        如果[[$ REMOTEALIVE -eq 1]]

        然後

        迴聲“關機保持活力”

            systemctl停止keepalived  

      echo“keepalived stop”

        科幻

#其他

#echo“MySQL正在上升”

#日期

科幻



退出0 #all done

新的配置文件

cat /etc/keepalived/keepalived.conf
global_defs {



      notification_email {

        anothermysqldba@gmail.com  

      }



      notification_email_from anothermysqldba@gmail.com  

      smtp_server localhost

      smtp_connect_timeout 30



      }







vrrp_script check_mysql {

   腳本“/etc/keepalived/keepalived_check.sh”

   間隔2

   重量2

}







vrrp_instance VI_1 {



      國家MASTER

      接口enp0s8   #<---什麼界面名稱包含您的真實IP / sbin / ifconfig

        #在ip link show中找到

      virtual_router_id 51

      優先級101

      advert_int 1

      nopreempt不同   #僅在較高優先級節點上需要

      認證{

        auth_type PASS

        auth_pass 1111

      }





      track_script {

        check_mysql

      }



      virtual_ipaddress {

        192.168.0.123  

      }




}



這一切都很棒但是有效嗎......

所以我們有2個主機

[root @ centosa keepalived] #hostname

centosa

[root @ centosb keepalived] #hostname
centosb

啟動keepalived

[root @ centosa keepalived] #systemctl status keepalived
●keepalived.service - LVS和VRRP高可用性監視器
   已加載:已加載(/usr/lib/systemd/system/keepalived.service;已禁用;供應商預設:已禁用)
   活動:不活動(死機)
[root @ centosa keepalived] #systemctl restart keepalived
[root @ centosa keepalived] #systemctl status keepalived
keepalived.service - LVS和VRRP高可用性監視器
   已加載:已加載(/usr/lib/systemd/system/keepalived.service;已禁用;供應商預設:已禁用)
    活動: 活動(運行)

[root @ centosa keepalived] #ssh 192.168.0.123'hostname'
root@192.168.0.123的密碼:  

centosa

證明連接工作已經完成

[root @ centosa keepalived] #mysql --defaults-file = .my.remotehost.cnf --host = 192.168.0.101   -e“select @@ hostname”
+ ------------ +
| @@ hostname |
+ ------------ +
| centosb     |
+ ------------ +
[root @ centosa keepalived] #mysql --defaults-file = .my.remotehost.cnf --host = 192.168.0.102   -e“select @@ hostname”
+ ------------ +
| @@ hostname |
+ ------------ +
| centosa     |
+ ------------ +

仔細檢查它是否正在運行......

[root @ centosa keepalived] #systemctl status keepalived | grep活躍
    活動: 活躍  

[root @ centosb keepalived] #systemctl status keepalived | grep活躍
    活動: 活躍  

測試當前VIP ..停止mysql並觀看相同的VIP更改主機...

[root @ centosa keepalived] #mysql --defaults-file = .my.remotehost.cnf --host = 192.168.0.123   -e“select @@ hostname”
+ ------------ +
| @@ hostname |
+ ------------ +
| centosa     |
+ ------------ +
[root @ centosa keepalived] #systemctl stop mysqld  
[root @ centosa keepalived] #mysql --defaults-file = .my.remotehost.cnf --host = 192.168.0.123   -e“select @@ hostname”
+ ------------ +
| @@ hostname |
+ ------------ +
| centosb     |
+ ------------ +

2019年4月10日星期三

有時慢速數據庫..不是數據庫......

所以我最近被要求調查為什麼更新的MySQL 5 .6比舊的5.5慢

所以我開始尋找標準變量和緩存等等。

測試用例是一個簡單的例程,在5.6上運行的時間比在5.5上運行時長兩倍。

添加到混合.. 5.6版本有兩倍Innodb_buffer_pool_size,當然更多ram整體。

所以我用MySQLslap開始了一些測試......

Mysqlslap測試顯示它在5.6上較慢

5.6:
mysqlslap --defaults-file =。/。my.cnf --concurrency = 150 --iterations = 130 -query = / test.sql --create-schema = applicationdata --verbose
基準
運行所有查詢的平均秒數:0.028秒
運行所有查詢的最小秒數:0.019秒
運行所有查詢的最大秒數:0.071秒
運行查詢的客戶端數量:150
每個客戶端的平均查詢數:1

5.5:
mysqlslap --defaults-file =。/。my.cnf --concurrency = 150 --iterations = 130 --query = / test.sql --create-schema = applicationdata --verbose
基準
運行所有查詢的平均秒數:0.015秒
運行所有查詢的最小秒數:0.011秒
運行所有查詢的最大秒數:0.024秒
運行查詢的客戶端數量:150
每個客戶端的平均查詢數:1


所有這些都違背了公共基準
http://dimitrik.free.fr/blog/archives/2013/02/mysql-performance-mysql-56-ga-vs-mysql-55-32cores.html

所以我檢查了磁盤級別 -

5.6:
#dd if = / dev / zero of = test bs = 1048576 count = 2048
2048 + 0條記錄
2048 + 0記錄了
複製2147483648字節(2.1 GB),25.7401 s,83.4 MB / s

#dd if = test of = / dev / null bs = 1048576
2048 + 0條記錄
2048 + 0記錄了
複製2147483648字節(2.1 GB),29.1527 s,73.7 MB / s

5.5:
#dd if = / dev / zero of = test bs = 1048576 count = 2048
2048 + 0條記錄
2048 + 0記錄了
複製2147483648字節(2.1 GB),19.9214秒,108 MB / s

#dd if = test of = / dev / null bs = 1048576
2048 + 0條記錄
2048 + 0記錄了
複製2147483648字節(2.1 GB),20.0243秒,107 MB / s



無論MySQL如何,5.5的磁盤都比較慢。 所以在這種情況下....看看修復磁盤速度.. MySQL運行正常,並將。

2018年5月24日星期四

代理MySQL :: HAproxy || ProxySQL&KeepAlived

所以当涉及到路由你的MySQL流量时,存在几个选项。 

现在我已经看到HAproxy更经常地与客户使用,这是非常简单的设置。 Percona为那些感兴趣的人提供了一个例子:

我个人喜欢ProxySQL。 Percona也很少有这方面的博客
Percona也有ProxySQL版本可用

我想我会写一些例子,但是整个Percona已经很好地解释了这一点。 我不想从这些帖子中拿走任何东西,而是指出通过这些网址可以获得很多好的信息。 因此,我不会重写已写入的内容,而会为感兴趣的人创建一组信息。

首先比较并决定你自己需要和想要什么。 当然,下面的链接会偏向ProxySQL,但它给你一个全面的范围供你考虑。
如果您拥有一个群集或主控要掌握,并且您不关心写vs vs读取到哪个服务器,只要您有连接; 那么HAproxy可能是一个简单的快速设置。

ProxySQL的优势在于能够以加权的方式对流量进行分类,简单易行。 所以你可以写入节点1,并从节点2和节点3选择拉。有关这方面的文档可以在这里找到:
是的,它可以通过HAproxy完成,但您必须相应地指导应用程序。
这是根据您的查询规则在ProxySQL中处理的。

现在显而易见的问题是:好的,那么如何让ProxySQL不会成为单点故障?

你可以投资是一个强大的负载平衡器等等等等......抛硬件......或者让自己容易,支持开源并使用KeepAlive d。 这是非常容易设置,所有这些都记录在这里:
如果你曾经处理lua和mysql-proxy ,ProxySQL和Keepalived应该对你来说非常简单。 如果您仍然希望出于某种原因: https : //launchpad.net/mysql-proxy

无论您选择HAproxy,ProxySQL还是其他解决方案,您都需要确保一旦发生单点故障而不会更换另一个故障点,并且keepalived非常适合。 如果你正在使用代理,那么没有这么做的理由是没有的。

所以ProxySQL上还有更多的东西。




2018年3月20日星期二

MySQL 8.0.4rc

MySQL 8.0.4rc剛剛發佈為“ Pre-General Availability草案:2018-03-19 ”。 

我決定快速瀏覽並註意我的印象。 其中一些對於很多人來說是個舊消息,因為這個版本已經被討論了一段時間,但我仍然加入了我的想法。

我注意到的第一件事是使用更新後的mysql客戶端的一個簡單問題。 我的舊版本仍然在我的道路上,導致

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded
這麼簡單的修復,並確保您使用的是有效的更新MySQL客戶端。 當然還有其他選項,例如將認證插件更改回mysql_native_password,但為什麼還要使用安全方法。 這是對安全性的非常好的增強,所以如果在使用這種更安全的方法建立連接時遇到一些連接問題,請不要感到震驚。


Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 8.0.4-rc-log

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

所以第一個非常酷的增強...

mysql> show create table user\G
*************************** 1. row ***************************
表:用戶
創建表:CREATE TABLE`user`(
`主機`字符(60)COLLATE utf8_bin NOT NULL DEFAULT'',
`User` char(32)COLLATE utf8_bin NOT NULL DEFAULT'',
`Select_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Insert_priv` enum('N','Y')字符集utf8不為NULL默認'N',
`Update_priv`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`Delete_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Drop_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Reload_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Shutdown_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Process_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`File_priv`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`Grant_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`References_priv`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`Index_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Alter_priv`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`Show_db_priv` enum('N','Y')字符集utf8不為NULL默認'N',
`Super_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_tmp_table_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Lock_tables_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Execute_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Repl_slave_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Repl_client_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_view_priv`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`Show_view_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_routine_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Alter_routine_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_user_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Event_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Trigger_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Create_tablespace_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`ssl_type`枚舉('','ANY','X509','SPECIFIED')字符集utf8不為NULL DEFAULT'',
`ssl_cipher` blob NOT NULL,
`x509_issuer` blob NOT NULL,
`x509_subject` blob NOT NULL,
`max_questions` int(11)unsigned NOT NULL DEFAULT'0',
`max_updates` int(11)unsigned NOT NULL DEFAULT'0',
`max_connections` int(11)unsigned NOT NULL DEFAULT'0',
`max_user_connections` int(11)unsigned NOT NULL DEFAULT'0',
`plugin` char(64)COLLATE utf8_bin NOT NULL DEFAULT'caching_sha2_password',
`authentication_string`文本COLLATE utf8_bin,
`password_expired`枚舉('N','Y')字符集utf8不為NULL DEFAULT'N',
`password_last_changed` timestamp NULL DEFAULT NULL,
`password_lifetime` smallint(5)unsigned DEFAULT NULL,
`account_locked` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Create_role_priv`枚舉('N','Y')字符集utf8不為NULL默認'N',
`Drop_role_priv` enum('N','Y')字符集utf8不為NULL DEFAULT'N',
`Password_reuse_history` smallint(5)unsigned DEFAULT NULL,
`Password_reuse_time` smallint(5)unsigned DEFAULT NULL,
PRIMARY KEY('Host`,`User`)
)/ *!50100 TABLESPACE`mysql` * / ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin STATS_PERSISTENT = 0 COMMENT ='用戶和全局權限'
一排(0.00秒)

是的,用戶表是InnoDB並擁有自己的TableSpace。

隨著新數據字典的添加,您現在將注意到Information_schema更改。
因此,作為一個簡單的示例,歷史上的Columns表格不是一個視圖,但現在已經發生變化,以及許多其他視圖,您可以通過所提供的網址查看。


mysql> show create table COLUMNS \G
*************************** 1. row ***************************
查看:COLUMNS
創建視圖:CREATE ALGORITHM = UNDEFINED DEFINER =`mysql.infoschema` @ localhost`

這似乎是為了幫助執行information_schema的性能,但是將每個查詢的臨時表創建移除到information_schema中。

本文的第14章深入探討了這一點,下面提供的URL將幫助您找到更多信息,未來的博客文章可能會更多地涉及這方面的內容。
前面提到的數據字典也可以導入原子數據定義語言(DDL)語句或原子DDL。


如果您在設置複製到新的MySQL 8.0實例之前沒有檢查您的查詢,這可能會導致一些事務處理。 我說這是因為桌面維護的處理可能會受到影響。 如果你用“If Exists”編寫乾淨的查詢,這不會是一個大問題。 總的來說,它是一個更基於事務的功能,可以保護您的數據和回滾選項。


資源管理看起來非常有趣,我將不得不花更多時間專注於此,因為它是MySQL 8.0的一項新功能。 總的來說,您可以分配組,不再需要設置查詢的優先級,而是讓您的分組定義查詢的行為方式以及分配給它的資源。

mysql> select @@version;
+------------+
| @@ version |
+ ------------ +
| 5.7.16-log |
+ ------------ +
一排(0.00秒)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
錯誤1109(42S02):information_schema中的表“RESOURCE_GROUPS”未知

mysql> select @@ version;
+ -------------- +
| @@ version |
+ -------------- +
| 8.0.4-rc-log |
+ -------------- +
一排(0.00秒)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| 字段| 類型| 空| Key | 默認| 額外|
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| RESOURCE_GROUP_NAME | varchar(64)| NO | | NULL | |
| RESOURCE_GROUP_TYPE | 枚舉('SYSTEM','USER')| NO | | NULL | |
| RESOURCE_GROUP_ENABLED | tinyint(1)| NO | | NULL | |
| VCPU_IDS | blob | 是| | NULL | |
| THREAD_PRIORITY | int(11)| NO | | NULL | |
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
5行(0.00秒)


關於InnoDB緩衝池緩存的更多信息現在可用。

mysql> desc INFORMATION_SCHEMA.INNODB_CACHED_INDEXES ;
+----------------+---------------------+------+-----+---------+-------+
| 字段| 類型| 空| Key | 默認| 額外|
+ ---------------- + --------------------- + ------ + --- - + --------- + ------- +
| SPACE_ID | int(11)unsigned | NO | | | |
| INDEX_ID | bigint(21)unsigned | NO | | | |
| N_CACHED_PAGES | bigint(21)unsigned | NO | | | |
+ ---------------- + --------------------- + ------ + --- - + --------- + ------- +
3行(0.01秒)


如果您不確定要設置InnoDB緩衝池,log_sizes或flush方法,MySQL將根據可用內存為您設置這些值。

innodb_dedicated_server

[mysqld]
innodb-dedicated-server=1

mysql> select @@ innodb_dedicated_server;
+ --------------------------- +
| @@ innodb_dedicated_server |
+ --------------------------- +
| 1 |
+ --------------------------- +

這個簡單的測試將我的innodb_buffer_pool_size設置為6GB,例如默認值為128MB時。

許多JSON添加以及正則表達式更改。 這兩種看起來都很有前途。

此版本本身的唯一複制增強功能是現在支持使用緊湊的二進制格式對JSON文檔進行部分更新的二進制日誌記錄。

然而,總體而言,許多功能都可用(您可以在這裡閱讀所有關於它們的信息 ),其中一個(我希望我的客戶明天)是每個通道的複製文件管理器。
我的測試實例已經啟用了二進制日誌,但它們現在默認情況下與基於TABLE和基於文件的主從信息一起使用(默認情況下基於該事務的粉絲)

總的來說,這只是第一眼看到這個版本和對它的非常高層次的想法,還有很多其他的變化。 查看有關此版本的其他博客帖子以及手冊發行說明也將有所幫助。 當然,下載和復審看起來對於管理,安全和復制的觀點非常有希望。