Как в созданный массив сделать push из query?
Он не пустой, он заполнился.
Но заполнился он только во время выполнения query, а если ты выведешь его содержимое ДО ЭТОГО, то да, он изначально был пустой.
Что делать - научиться писать асинхронно.
Если вы пытаетесь обратиться к admins до момента завершения connection.query , вы получаете пустой массив, потому что в момент обращения к admins - admins еще пустой.
как выполняется ваш код :
выводится  console.log(1);
начинается выполнение connection.query..... (оно асинхронно)
выводится  console.log(2); connection.query. еще не завершился....
выводится console.log(admins); он пуст ибо, connection.query. еще не завершился....
выводится  console.log(3); connection.query. еще не завершился....
выводится "query is finished!" - выполнение connection.query завершено 
console.log(admins) - вернет полученные данные - выполнение connection.query завершено и admins наполнен данными console.log(1);
connection.query('SELECT name FROM admin',(error, result, fields) => {
  for(var i = 0; i < result.length; i++){
    admins.push(result[i].name);
  
  }
  console.log('query is finished!');
  console.log(admins); // здесь данные доступны
});
console.log(2);
console.log(admins); // здесь данные еще НЕ доступны
console.log(3);