Переустановка MySQL или сброс его корневого пароля

Я использую MySQL 5.7.19 под LAMP на двух Ubuntu 16.04. Это экземпляр AWS EC2.

Прошло некоторое время с тех пор, как я установил MySQL, и я не использовал его, поэтому, если я переустановлю его, проблем не будет. Ничего, что я ввожу для пароля root не работает

Я старался

 sudo /etc/init.d/mysql stop
 sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
sudo  mysql -u root

В результате

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Затем я попробовал процедуру, изложенную здесь. Когда я вошел

 sudo apt-get install mysql-server

я получил

Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-headers-generic : Depends: linux-headers-4.4.0-119-generic but it is     not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Когда я вхожу

ps -aux | grep mysql

результат

ubuntu   27152  0.0  0.0  12948   984 pts/1    S+   12:30   0:00 grep --color=auto mysql

Когда я вхожу

 mysql -u root -p

я получил

Enter password:

Так что mysql не был удален, и я не могу перенастроить его.

Обновление 1:

Когда я побежал

sudo dpkg-reconfigure mysql-server-5.7

я получил

update-alternatives: warning: forcing reinstallation of alternative 
/etc/mysql/mysql.cnf because link group my.cnf is broken
update-alternatives: warning: not replacing /etc/mysql/my.cnf with a link
mysql_upgrade: [ERROR] unknown option '--~'
Upgrade process encountered error and will not continue.

 mysql -u root -p

результаты в

Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Редактировать 2

Я попробовал следующее с соответствующими результатами.

ubuntu@ip-10-0-1-73:~$ sudo apt autoremove --purge mysql-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-headers-generic : Depends: linux-headers-4.4.0-119-generic but it is     not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify     a solution).
ubuntu@ip-10-0-1-73:~$ sudo apt install mysql-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-headers-generic : Depends: linux-headers-4.4.0-119-generic but it is     not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify     a solution).

Бег

apt-get -f install

ничего не изменилось.

Изменить 3:

Если я использую

sudo mysql -u root

это берет меня в MySQL. Если я использую ключ -p, он принимает все как пароль. Тем не менее, когда я вхожу

mysql> UPDATE mysql.user SET authentication_string=PASSWORD('newPassword') WHERE User='root';

я получил

Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

Warning (Code 1681): 'PASSWORD' is deprecated and will be removed in a future release.

Я тогда вошел

FLUSH PRIVILEGES;

и получил следующее сообщение

Query OK, 0 rows affected (0.00 sec)

Затем я ухожу и получаю тот же результат, если не использую sudo

 mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Изменить 4:

Я попробовал следующее с последующими результатами.

$ sudo apt install linux-headers-4.4.0-119-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-headers-4.4.0-119-generic : Depends: linux-headers-4.4.0-119 but it     is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
ubuntu@ip-10-0-1-73:~$ sudo apt-get -f install linux-headers-4.4.0-119-    generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-headers-4.4.0-119-generic : Depends: linux-headers-4.4.0-119 but it     is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
$ sudo apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer     required:
  linux-headers-4.4.0-64 linux-headers-4.4.0-64-generic linux-headers-4.4.0-    66 linux-headers-4.4.0-66-generic linux-headers-4.4.0-70 linux-headers-4.4.0-70-generic
  linux-headers-4.4.0-71 linux-headers-4.4.0-71-generic linux-headers-4.4.0-    72 linux-headers-4.4.0-72-generic linux-headers-4.4.0-75 linux-headers-4.4.0-75-    generic
  linux-headers-4.4.0-78 linux-headers-4.4.0-78-generic linux-headers-4.4.0-    79 linux-headers-4.4.0-79-generic linux-headers-4.4.0-81 linux-headers-4.4.0-81-generic
  linux-headers-4.4.0-83 linux-headers-4.4.0-83-generic linux-headers-4.4.0-87 linux-headers-4.4.0-87-generic linux-headers-4.4.0-89 linux-headers-4.4.0-89-generic
  linux-headers-4.4.0-91 linux-headers-4.4.0-91-generic linux-headers-4.4.0-92 linux-headers-4.4.0-92-generic linux-image-4.4.0-112-generic
  linux-image-4.4.0-64-generic linux-image-4.4.0-66-generic linux-image-    4.4.0-70-generic linux-image-4.4.0-71-generic linux-image-4.4.0-72-generic
  linux-image-4.4.0-75-generic linux-image-4.4.0-78-generic linux-image-4.4.0-79-generic linux-image-4.4.0-81-generic linux-image-4.4.0-83-generic
  linux-image-4.4.0-87-generic linux-image-4.4.0-89-generic linux-image-4.4.0-91-generic linux-image-4.4.0-92-generic linux-image-4.4.0-97-generic
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  linux-headers-4.4.0-119 linux-headers-4.4.0-119-generic
The following NEW packages will be installed:
  linux-headers-4.4.0-119 linux-headers-4.4.0-119-generic
0 upgraded, 2 newly installed, 0 to remove and 224 not upgraded.
10 not fully installed or removed.
Need to get 0 B/10.8 MB of archives.
After this operation, 78.3 MB of additional disk space will be used.
Do you want to continue? [Y/n]
(Reading database ... 512472 files and directories currently installed.)
Preparing to unpack .../linux-headers-4.4.0-119_4.4.0-119.143_all.deb ...
Unpacking linux-headers-4.4.0-119 (4.4.0-119.143) ...
dpkg: error processing archive /var/cache/apt/archives/linux-headers-4.4.0-    119_4.4.0-119.143_all.deb (--unpack):
 unable to create '/usr/src/linux-headers-4.4.0-    119/include/linux/cpufeature.h.dpkg-new' (while processing './usr/src/linux-        headers-4.4.0-119/include/linux/cpufeature.h'): No space left on device
No apport report written because the error message indicates a disk full     error
                                                                                      dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Preparing to unpack .../linux-headers-4.4.0-119-generic_4.4.0-    119.143_amd64.deb ...
Unpacking linux-headers-4.4.0-119-generic (4.4.0-119.143) ...
dpkg: error processing archive /var/cache/apt/archives/linux-headers-4.4.0-    119-generic_4.4.0-119.143_amd64.deb (--unpack):
 unable to create '/usr/src/linux-headers-4.4.0-119-    generic/include/config/rtc/drv/88pm860x.h.dpkg-new' (while processing     './usr/src/linux-headers-4.4.0-119-generic/include/config/rtc/drv/88pm860x.h'):     No space left on device
No apport report written because the error message indicates a disk full     error
                                                                                  dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
 /var/cache/apt/archives/linux-headers-4.4.0-119_4.4.0-119.143_all.deb
 /var/cache/apt/archives/linux-headers-4.4.0-119-generic_4.4.0-    119.143_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

$df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              498080       0    498080   0% /dev
tmpfs             101440   12068     89372  12% /run
/dev/xvda1       8117828 5515716   2166836  72% /
tmpfs             507184       0    507184   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             507184       0    507184   0% /sys/fs/cgroup
tmpfs             101444       0    101444   0% /run/user/1000

3 ответа

Решение

Наконец-то разобрались.

Сначала найдите и удалите все экземпляры my.cnf.bak. Также удалены /etc/alternatives/my.cnf, /var/lib/dpkg/alternatives/my.cnf и /etc/mysql/conf.d (но их резервное копирование). затем

sudo apt-get remove --purge mysql-\*
sudo apt-get install mysql-server mysql-client

Если вы все еще получаете что-то вроде

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

это часто решается с

sudo service mysql start

Для сброса пароля MySQL, пожалуйста, следуйте процедуре из " B.5.3.2.2 Сброс пароля root: Unix и Unix-подобные системы":

Остановите сервер MySQL, отправив нормальный kill (не kill -9) к mysqld процесс. Используйте фактический путь к файлу.pid в следующей команде:

kill `cat /mysql-data-directory/host_name.pid`

Используйте обратные кавычки (не кавычки вперед) с командой cat. Это приводит к тому, что вывод команды cat подставляется в команду kill.

Создайте текстовый файл, содержащий оператор назначения пароля в одной строке. Замените пароль на пароль, который вы хотите использовать.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

Сохраните файл. В этом примере предполагается, что вы называете файл /home/me/mysql-init, Файл содержит пароль, поэтому не сохраняйте его там, где его могут прочитать другие пользователи. Если вы не вошли как mysql (пользователь, от имени которого работает сервер), убедитесь, что файл имеет разрешения, которые позволяют mysql читать это.

Запустите сервер MySQL с помощью специального --init-file опция:

mysqld --init-file=/home/me/mysql-init &

Сервер выполняет содержимое файла, названного --init-file опция при запуске, изменение 'root'@'localhost' пароль от аккаунта.

Также могут потребоваться другие варианты, в зависимости от того, как вы обычно запускаете свой сервер. Например, --defaults-filможет понадобиться раньше --init-file,

После успешного запуска сервера удалите /home/me/mysql-init,

Во-первых, давайте исправим вашу проблему с менеджером пакетов. Установите недостающие зависимости, используя:

sudo apt install -f

После этого, если вы уже удалили mysql-serverпожалуйста, переустановите его:

sudo apt install mysql-server

Если вы еще не удалили его или переустановили, но не запросили новый пароль root для MySQL, запустите его (при необходимости изменив номер версии):

sudo dpkg-reconfigure mysql-server-5.7

Это должно было сбросить ваш пароль к настоящему времени. Попробуйте войти снова как root с интерактивной подсказкой пароля:

mysql -u root -p

Если вы все еще получаете ошибку

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

это, скорее всего, означает, что сервер MySQL не работает. Попробуйте начать с:

sudo systemctl restart mysql

После этого, systemctl status mysql должен сообщить об этом как "активный (работающий)". Попробуйте войти снова.

Другие вопросы по тегам