まあ、端的に言うとここに全部書いてあった。

 MySQLでToo many connectionsが出た時の対応 http://qiita.com/kenjiszk/items/c3d46ac837845281e62b

% mysql -u root -p  

mysql> show variables like "%max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.01 sec)

設定変えるときは /etc/my.cnf に

[mysqld]
max_connections        = 1000
と書けばいいっぽいが、Ubuntuだと設定ファイルの階層がちょっと違っていて
/etc/mysql/mysql.conf.d/max_connections.cnf みたいな新規ファイルを作り、
[mysqld]
max_connections        = 1000
と書くのがよい。

これで終わり・・・・・と思うだろ?

% mysql -u root -p  

mysql> show variables like "%max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 214   |
+-----------------+-------+
1 row in set (0.01 sec)

なんだよ、214って。幸いなことに同じことにあたった人がいたのですぐに解決

MySQL Max_connections stuck on 214? https://codepoets.co.uk/2015/mysql-max_connections-stuck-on-214/

Increasing File Descriptors and Open Files Limit CentOS 7 https://naveensnayak.wordpress.com/2015/09/17/increasing-file-descriptors-and-open-files-limit-centos-7/


ようするに process の rlmit が低すぎるので上げてあげればよろしい。
/etc/security/limits.conf を設定するのは Ubuntu 16.04 では動かなくて(そして必要もなくて)

/lib/systemd/system/mysql.service

の [Service] セクションに
LimitNOFILE=65535
などと足してやればいい。

%
/lib/systemd/*/*.service は上書きしてはいけないらしいです。

systemdで既存のunitを編集する2つの方法 http://qiita.com/nvsofts/items/529e422bb8a326401c39

このへんのページ参照
%

sudo EDITOR=emacs systemctl edit mysql.service
とかして、設定ファイル編集画面を立ち上げて

[Service]
LimitNOFILE=65535
と書いて、セーブ&exit。

おわったら、

% systemctl restart mysql
して、また最初の設定値確認の方法で、ただしく動いていることを確認する。


追記 2016/12/13: はてぶに大層有益な情報がのってたので転載
tmtms: Ubuntu の systemd の設定で root じゃなくて mysql ユーザーで起動するようになってて mysqld 起動後に setrlimit で fd の上限をあげられないからかな。大昔に調べてた→ http://tmtms.hatenablog.com/entry/20090605/1244215294