Що стосується Вашого оновлення:
Коли процес запускається, він має виділену область пам’яті, де зберігаються аргументи, та int, який повідомляє, скільки аргументів було передано.
MEMORY
argc 2
argv[0] program_name
argv[1] foo
argv[2] bar
MySQL перевіряє, чи був пароль переданий у командному рядку -p, і якщо він був скопійований у нову змінну, яка не видно, то перезапишіть цю область пам'яті з x'es.
Простими словами, наприклад:
argc 2
argv[1] -p
argv[2] p4ssw0rd
new_var = copy(argv[2]);
argv[2] = "xxxxx";
Ви можете знайти його, наприклад, у client/mysqladmin.ccвихідному коді:
case 'p':
...
opt_password=my_strdup(argument,MYF(MY_FAE));
while (*argument)
*argument++= 'x'; /* Destroy argument */
Під час psзапуску він зчитує область пам'яті аргументів, ( argv[N]), і таким чином вона є xxxx.
Дуже короткий час пароль видно, але лише протягом декількох циклів процесора.
Ви можете оновити пароль MySQL за допомогою спеціальної --init-fileопції та процедури. С.5.4.1.2. Скидання пароля Root: Unix Systems
mysqld_safe --init-file=/home/me/mysql-init &
Редагувати:
Як @Gilles сказати, що ви можете echo,printf або використовувати hereдокумент зі сценарію.
Ви також можете додати це .my.cnfу свій домашній каталог або у ( тимчасовий ) файл та скористатися --defaults-extra-fileопцією. (Повірте, ви повинні додати цю опцію рано в командному рядку.) Необов’язково також включати користувача. Також відзначте додаткове ім'я опції, якщо ви не хочете використовувати лише цей файл як конфігурацію:
[client]
user=foo
password='password!'
shell> chmod 400 my_tmp.cnf
shell> mysql --defaults-extra-file=my_tmp.conf -...
Необов'язково [client]групування робить mysqldпропуск конфігурації.
Можна також використовувати MYSQL_PWDзмінну середовища, але це ніколи не слід використовувати, оскільки ви можете перераховувати середовище, у багатьох psреалізаціях ps -e, у /proc/<PID>/environфайлі на Linux тощо.
tr '\0' '\n' < /proc/<PID>/environ
Більше про тему тут .
Ви також можете подивитися на утиліту MySQL Configuration Utility, яка дозволяє зберігати пароль у зашифрованому файлі у вашому домашньому каталозі - .mylogin.cnf.