In my app every user has its own database that created when user registered. Connection and database data (database name, username, password) are saved in a table in default
I have the same problem, my solution is to change the database using Config::set first then run Artisan::call("migrate"). so based on your code:
DB::statement(DB::raw('CREATE DATABASE ' . $database_name));
Config::set('database.connections.mysql.database', $database_name);
Artisan::call("migrate --database=mysql");
the config only changed on your session then reset later as your current setting.