Error 500 while MasterDB is unavailable.

I have configuration with master-slave DB records.


 'components' => [

        'db' => [

            'class' => 'yii\db\Connection',

            'enableSchemaCache' => true,

            'masterConfig' => [

                'username' => '1111',

                'password' => '1111',

                'charset' => 'utf8',

            ],

            'masters' => [

                ['dsn' => 'mysql:host=111.111.111.111;dbname=1111'],

            ],


            'slaveConfig' => [

                'username' => '1111',

                'password' => '1111',

                'charset' => 'utf8',

            ],

            'slaves' => [

                ['dsn' => 'mysql:host=localhost;dbname=1111'],

            ],

        ],



When MasterDB is unavailable I have 500 error on my site.

Do somebody know, how to avoid error 500, when master DB is unavailable?

Here is my application log:


2016-02-19 13:24:40 [176.104.168.2][-][-][error][yii\base\InvalidConfigException] exception 'yii\base\InvalidConfigException' with message 'None of the master DB servers is available.' in /var/www/112ua/vendor/yiisoft/yii2/db/Connection.php:518

Stack trace:

#0 /var/www/112ua/vendor/yiisoft/yii2/db/Connection.php(836): yii\db\Connection->open()

#1 /var/www/112ua/vendor/yiisoft/yii2/db/Connection.php(823): yii\db\Connection->getMasterPdo()

#2 /var/www/112ua/vendor/yiisoft/yii2/db/Connection.php(796): yii\db\Connection->getSlavePdo()

#3 /var/www/112ua/vendor/yiisoft/yii2/db/Connection.php(680): yii\db\Connection->getDriverName()

#4 /var/www/112ua/vendor/yiisoft/yii2/db/Connection.php(698): yii\db\Connection->getSchema()

#5 /var/www/112ua/vendor/yiisoft/yii2/db/ActiveQuery.php(324): yii\db\Connection->getQueryBuilder()

#6 /var/www/112ua/vendor/yiisoft/yii2/db/Query.php(206): yii\db\ActiveQuery->createCommand(NULL)

#7 /var/www/112ua/vendor/yiisoft/yii2/db/ActiveQuery.php(132): yii\db\Query->all(NULL)

#8 /var/www/112ua/frontend/components/Menu.php(18): yii\db\ActiveQuery->all()

#9 [internal function]: frontend\components\Menu->frontend\components\{closure}(Object(yii\db\Connection))

#10 /var/www/112ua/vendor/yiisoft/yii2/db/Connection.php(417): call_user_func(Object(Closure), Object(yii\db\Connection))

#11 /var/www/112ua/frontend/components/Menu.php(19): yii\db\Connection->cache(Object(Closure), 300)

#12 /var/www/112ua/vendor/yiisoft/yii2/base/Object.php(107): frontend\components\Menu->init()

#13 [internal function]: yii\base\Object->__construct(Array)

#14 /var/www/112ua/vendor/yiisoft/yii2/di/Container.php(366): ReflectionClass->newInstanceArgs(Array)

#15 /var/www/112ua/vendor/yiisoft/yii2/di/Container.php(151): yii\di\Container->build('frontend\\compon...', Array, Array)

#16 /var/www/112ua/vendor/yiisoft/yii2/BaseYii.php(344): yii\di\Container->get('frontend\\compon...', Array, Array)

#17 /var/www/112ua/vendor/yiisoft/yii2/di/ServiceLocator.php(133): yii\BaseYii::createObject(Array)

#18 /var/www/112ua/vendor/yiisoft/yii2/base/Application.php(302): yii\di\ServiceLocator->get('menu')

#19 /var/www/112ua/vendor/yiisoft/yii2/web/Application.php(63): yii\base\Application->bootstrap()

#20 /var/www/112ua/vendor/yiisoft/yii2/base/Application.php(267): yii\web\Application->bootstrap()

#21 /var/www/112ua/vendor/yiisoft/yii2/base/Object.php(107): yii\base\Application->init()

#22 /var/www/112ua/vendor/yiisoft/yii2/base/Application.php(206): yii\base\Object->__construct(Array)

#23 /var/www/112ua/frontend/web/index.php(17): yii\base\Application->__construct(Array)

#24 {main}

At least one master should be available.

What you want to do might be 2 masters with no slave, instead of a master with a slave.

But in such situation it will be write for both masters?

The write operation will be executed on one master or the other, not both at the same time.