#mysqldump
Explore tagged Tumblr posts
Text
Access denied you need (at least one of) the SUPER privilege(s) for this operation in MariaDB or MySQL
Mysql restore the dump getting error access denied; you need (at least one of) the SUPER privilege(s) for this operation If you face this error “Access denied; you need (at least one of) the SUPER privilege(s) for this operation” while restoring the SQL dump in the database with Mysql utility. Then you have problem with the DEFINER statement present in procedures or functions present in…
View On WordPress
0 notes
Text
mysqldump: Got errno 28 on write
If you’re getting “mysqldump: Got errno 28 on write” this means that the location where you’re dumping the database, doesn’t have enough free space.
View On WordPress
0 notes
Link
This tutorial explains how to backup and restore MySQL or MariaDB databases from the command line using the mysqldump utility.
The backup files created by the mysqldump utility are basically a set of SQL statements that can be used to recreate the original database. The mysqldump command can also generate files in CSV and XML format.
You can also use the mysqldump utility to transfer your MySQL database to another MySQL server.
If you don’t backup your databases, a software bug or a hard-drive failure could be disastrous. To help save you lots of time and frustration, it is strongly recommended that you take the precaution of regularly backing up your MySQL databases.
0 notes
Text
Convert latint1 database to UTF-8
$> mysqldump --opt -Q -u USER -p PASSWORT -h HOST DB > dump.sql $> sed -i 's/CHARSET=latin1/CHARSET=utf8 COLLATE=utf8_unicode_ci/g' dump.sql $> sed -i 's/SET NAMES latin1/SET NAMES utf8/g' dump.sql $> mysql -u USER -pPASSWORT --default-character-set=utf8 database < dump.sql
View On WordPress
0 notes
Text
Haven't done a computer status update in a little bit. Raspberry Pi media server has been psuedo-retired. It's currently still functioning as a media server for a christmas display at my wife's work until the end of December.
It has been successfully replaced by the Dell Optiplex that I got from work. I was able to skip the process of building a migration script for the server (to allow files to be moved and refound via filename & hash), but only because I've been mapping storage outside the server's webroot via link files in the upload directory. So on the new HD the files are actually in the upload directory rather than linked to it. As far as the server knows they're in the same place.
I transferred the software between machines by making a new install of vogon on the optiplex and then importing a mysqldump of the existing install into it, bringing the user accounts, media data, and other configuration elements with it. I did end up changing the storage engine of the data and data_meta tables into innodb (from isam) and adding some additional indexing. There were some noticeable performance differences on the generated join queries between servers. We were looking at 7sec+ lookup times for searches in the audio module. I'm still not sure if it's a mariadb version difference between raspbian and ubuntu lts, if something got corrupted in the export/import process, or if it was some strange storage lookup difference between running the database off of a SETA Hard-Drive versus an SD card. I initially thought maybe it was a fragmentation issue, but the built in optimization processes didn't really impact it, but with the adjustments to the indexing we're regularly getting query times measured in microseconds versus seconds, so it's working pretty well now.
The x86 processor and the faster storage (without the power dropout issues) have really improved the experience. Especially with reading comic books.
If I haven't explained it before, the way the CBZ reader works is that it sends a file list from the archive to the browser, the browser requests an image, and the server extracts the image data into RAM, base64 encodes it, and sends it back to the browser. It's a process that is bottlenecked by both CPU and storage speeds, so it's noticeably snappier on the new machine, even if the CPU is over a decade old at this point.
I'm actually considering taking a crack at forking mozilla's pdf.js to work a similar way, sending a page of data at a time, to decrease transfer times and allow lower memory devices to open large PDFs without having to actually download the whole thing. I suspect that means I'm going to have to build smaller single page PDF files on the fly, which would mean coming up with some kind of solution for in document links. I'm still in the phase of deciding if it's enough of a problem to put effort into solving, so I haven't done enough research to know if it will be easy or difficult. It's always hard to tell in situations like this because just about every web reader project assumes downloading the whole file, and the question is do they do it this way because it's hard to sub-divide the format, or do they do it because full clientside logic can be demoed on github pages.
3 notes
·
View notes
Text
MySQL 9.3 llega con mejoras en JavaScript, replicación y copias de seguridad
Oracle ha lanzado MySQL 9.3, la tercera actualización de la serie 9.x, introduciendo importantes novedades en gestión de usuarios, soporte para JavaScript y replicación en grupo, reforzando su posición como una de las bases de datos relacionales más populares. Principales novedades 1. Gestión avanzada de usuarios en mysqldump Nueva opción --users para generar dumps lógicos con sentencias CREATE…
0 notes
Text
A miért ellenőrizzük rendszeresen a mentéseinket mai kiadásában
A Pingvin prodról Jenkins-el naponta készítek egy adatbázis mentést. Azért ezzel, mert egyúttal betöltöm az adatokat a Staging környezetre is, hogy automatikusan érzékelhessek dolgokat.
Na most, a Jenkins szerint ez a művelet sikeresen lefutott:
mysqldump: Got error: 2002: "Can't connect to MySQL server on '<>' (115)" when trying to connect
Hogyne.
A parancs kimenete egy üres fájl volt, azt pedig "boldogan" betöltötte a staging környezetre -> nem írt felül semmit.
Ezután pedig sikeresen újraindította, újratesztelte a staging környezetet, hiszen a meglévő DB rendben van.
Én meg örültem, hogy minden faja. Ja, nem.
A megoldás a pipefail bekapcsolása, ami nálam kimaradt.
Szerencsére ez a tanulópénz csak időben mérhető, adatban nem.
0 notes
Text
Backup and Restore MySQL database with mysqldump
This article explains how to backup and restore MySQL databases using the mysqldump tool on Ubuntu 24.04 mysqldump is a command-line utility used to create a backup of MySQL databases. It lets you create backups of your databases to prevent data loss in case of hardware failure, data corruption, or accidental deletion. The SQL output generated by mysqldump is standard SQL, making it compatible…
0 notes
Text
蜘蛛池数据如何备份?
在互联网技术领域,蜘蛛池(Spider Pool)是一个重要的概念,它主要用于网站的爬虫任务管理。对于维护一个健康的蜘蛛池系统来说,定期备份数据是至关重要的步骤。这不仅能够确保数据的安全性,还能在系统出现故障时快速恢复。那么,蜘蛛池数据应该如何备份呢?本文将为你详细介绍。
1. 确定备份需求
首先,你需要明确哪些数据需要备份。通常包括爬虫任务配置、抓取的数据、日志文件等。确定这些内容后,可以更好地规划备份策略。
2. 选择合适的备份工具
市面上有许多备份工具可以选择,如MySQL数据库备份工具、云存储服务等。根据你的具体需求和技术栈,选择最适合的工具进行备份。例如,如果你使用的是MySQL数据库,可以考虑使用mysqldump命令进行备份。
3. 制定备份计划
制定一个详细的备份计划非常重要。这包括备份的时间间隔、备份的存储位置、备份的保留周期等。建议定期进行全量备份,并在每次更新或重要操作后进行增量备份。
4. 测试备份与恢复
完成备份后,一定要测试备份文件的有效性。通过模拟数据丢失的情况,尝试从备份中恢复数据,确保整个流程顺畅无误。这样可以在真正遇到问题时,迅速有效地恢复数据。
5. 安全存储备份文件
最后,确保备份文件的安全存储。可以使用加密技术保护备份文件,避免未经授权的访问。同时,最好将备份文件存储在多个地点,以防止物理损坏导致的数据丢失。
结语
备份蜘蛛池数据是一项重要的工作,它能为系统的稳定运行提供保障。通过上述步骤,你可以建立一套完整的备份方案,确保数据安全无忧。你平时是如何备份数据的呢?欢迎在评论区分享你的经验!
希望这篇文章对你有所帮助!如果有任何疑问或想要进一步讨论的话题,请随时留言。
加飞机@yuantou2048
負面刪除
蜘蛛池出租
0 notes
Text
How to Repair Corrupted MySQL Table?
I recently encountered an issue with one of my MySQL databases. A few tables seem to have become corrupted, and I’m getting errors like #126 - Incorrect key file for table and #1030 - Got error -1 from storage engine.
I’ve done some Googling and found a few solutions, but I’m unsure which method is the safest to avoid data loss. Has anyone here dealt with this issue before? What’s the best way to repair corrupted MySQL tables? Any advice would be greatly appreciated!
Reply 1:
Hi! Corrupted MySQL tables can happen for several reasons—abrupt server shutdowns, hardware failures, or bugs in the storage engine. Don’t worry; this is usually fixable!
The first thing you need to know is which storage engine your table is using—MyISAM or InnoDB. The repair process depends on that.
For MyISAM tables:
Backup your database first! Corruption repairs can sometimes cause data loss.
Run the CHECK TABLE table_name; command in MySQL. This will identify whether the table is corrupted.
Use the REPAIR TABLE table_name; command to fix the table.
If the above doesn’t work, you can manually repair it using the myisamchk tool.
Stop your MySQL server.
Run: myisamchk --recover /path/to/table_name.MYI
This process should resolve most MyISAM corruption issues.
Reply 2:
Hey there! For InnoDB tables, the approach is slightly different because InnoDB uses a crash recovery mechanism. Here’s what you can try:
Restart MySQL: Sometimes, a simple restart allows InnoDB to recover on its own.
Force Recovery Mode: If the restart doesn’t work, modify the my.cnf file by adding the following under [mysqld]:
makefile
Copy code
innodb_force_recovery = 1
Increase the value up to 6 if needed. Restart MySQL after each change.
Dump and Restore: Once the table is accessible, dump the data using mysqldump and restore it to a fresh table.
Always proceed with caution while using innodb_force_recovery. At higher levels, it may render your database read-only.
Reply 3:
Adding to what others have said, here are a few general tips for avoiding corruption in the future:
Use a stable power supply or UPS to prevent abrupt shutdowns.
Enable binary logging in MySQL for easy recovery.
Regularly back up your database. Tools like mysqldump, Percona XtraBackup, or automated backups can save you a lot of trouble.
Keep your MySQL server updated to avoid bugs.
If all else fails, check your server logs (/var/log/mysql/error.log on Linux) for detailed error messages. Sometimes the root cause isn’t immediately obvious.
Reply 4:
One last thing! If you’re stuck with serious corruption and can’t repair the table, try these steps:
Rename the corrupted table (RENAME TABLE old_table_name TO corrupted_table;).
Create a new table with the same schema.
Use a tool like SELECT INTO OUTFILE to retrieve as much data as possible from the corrupted table and re-import it into the new one.
Good luck, and don’t forget to test your recovery plan in a staging environment before applying changes to production!
0 notes
Text
ERROR 1153 at line 4528: Got a packet bigger than "max_allowed_packet" bytes mysqldump
mysqldump: Error 2020: Got packet bigger than ‘max_allowed_packet’ Error: Getting the following error while taking the backup of database with mysqldump utility mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `mailbox_app` at row: 4528 Cause: default max_allowed_packet value is 64MB. Solution: We can increase the value of this parameter in mysqldump…
View On WordPress
0 notes
Text
Optimising MySQL Performance: Tips and Best Practices
MySQL is a popular choice for database management due to its flexibility, scalability, and user-friendly nature. However, as your data grows, you might experience performance slowdowns. Fear not! By applying a few optimisation strategies, you can significantly improve your MySQL performance and ensure your application runs smoothly. This article provides valuable tips and best practices to help you get the most out of your MySQL database, brought to you by SOC Learning.
1. Choose the Right Storage Engine
MySQL supports several storage engines, each with its own advantages. The most commonly used are InnoDB and MyISAM:
InnoDB: Best for transactions, data integrity, and concurrent read/write operations. It supports foreign keys and is ACID-compliant, making it ideal for most applications.
MyISAM: Faster for read-heavy operations but lacks support for transactions and foreign keys. It’s suitable for applications that require fast read speeds and fewer write operations.
Choose a storage engine based on your specific needs to enhance performance.
2. Optimise Queries
Inefficient queries can be a significant bottleneck in your database performance. Here’s how you can optimise them:
Use Indexes Wisely: Indexes speed up search queries but slow down insert, update, and delete operations. Add indexes on columns that are frequently used in WHERE, JOIN, and ORDER BY clauses but avoid over-indexing.
Avoid SELECT * Queries: Instead of selecting all columns, specify only the columns you need. This reduces the amount of data MySQL has to fetch.
Use EXPLAIN for Query Analysis: The EXPLAIN command provides insight into how MySQL executes a query. Analyse the output to find bottlenecks and optimise your queries accordingly.
3. Regularly Analyse and Defragment Tables
Over time, tables can become fragmented due to insertions, updates, and deletions. This fragmentation can slow down performance. Regularly running the ANALYSE TABLE and OPTIMISE TABLE commands helps MySQL update its statistics and reorganise tables for better performance.
4. Optimise Database Schema Design
A well-structured database schema can significantly impact performance. Follow these best practices:
Normalise Tables: Break down tables into smaller, related pieces to reduce redundancy and ensure data integrity.
Denormalise When Necessary: In some cases, denormalisation (storing redundant data to reduce JOIN operations) can improve performance, especially in read-heavy applications.
Use Proper Data Types: Choose the smallest data type that can store your data. This reduces disk space and memory usage, resulting in faster performance.
5. Use Caching
Caching reduces the load on your MySQL server by storing frequently accessed data in memory. Tools like Memcached or Redis can be used for caching database queries, reducing the number of times MySQL needs to access disk storage.
6. Monitor and Fine-Tune MySQL Configuration
MySQL comes with default configuration settings that might not be optimal for your application. Use tools like MySQL Tuner to analyse and suggest configuration changes based on your workload. Key parameters to focus on include:
Buffer Pool Size: Set the InnoDB buffer pool size to about 70-80% of your server's available memory. This helps store frequently accessed data in memory.
Query Cache Size: Enable and configure query caching for read-heavy workloads.
Connection Limits: Adjust the max_connections and wait_timeout settings to manage the number of connections MySQL can handle simultaneously.
7. Partition Large Tables
Partitioning splits large tables into smaller, more manageable pieces, which can significantly reduce query execution time. MySQL supports range, list, hash, and key partitioning. Choose the appropriate method based on your data and query patterns.
8. Regular Backups and Maintenance
Regular backups are crucial to protect your data. Use tools like mysqldump or MySQL Enterprise Backup to create backups without impacting performance. Additionally, perform regular maintenance tasks such as updating statistics, rebuilding indexes, and checking for data corruption.
9. Monitor Performance Metrics
Use MySQL's built-in tools, such as the Performance Schema and MySQL Enterprise Monitor, to monitor various performance metrics like slow queries, disk usage, and connection statistics. Regular monitoring helps identify potential performance issues early and allows you to take proactive measures.
10. Stay Updated
Always keep your MySQL server updated to the latest stable version. New releases often include performance improvements, bug fixes, and enhanced features that can boost performance.
Conclusion
Optimising MySQL performance is an ongoing process that involves a mix of strategic planning, monitoring, and regular maintenance. By following these best practices, you can ensure your database is running efficiently and can handle your growing data needs.
At SOC Learning, we understand the importance of a high-performing database in delivering quality online education. Our coding courses, including our MySQL training, are designed to help you master database management skills. Visit SOC Learning to learn more about our courses and enhance your data management expertise today!
0 notes
Text
Hướng dẫn các bước Backup MySQL Database cập nhật mới nhất

Backup MySQL Database là một bước quan trọng và không thể thiếu trong quản lý hệ thống cơ sở dữ liệu. Đối với MySQL, việc sao lưu cơ sở dữ liệu không chỉ giúp bảo vệ dữ liệu khỏi các sự cố không mong muốn mà còn hỗ trợ trong việc khôi phục dữ liệu một cách nhanh chóng và hiệu quả. Dưới đây là hướng dẫn chi tiết và cập nhật mới nhất về Backup MySQL Database.
1. Tại sao Backup MySQL Database quan trọng?
Sao lưu cơ sở dữ liệu MySQL giúp bạn bảo vệ dữ liệu khỏi mất mát do các sự cố như:
Lỗi phần cứng: Các lỗi này có thể xảy ra bất ngờ và gây mất dữ liệu nếu không có bản sao lưu.
Lỗi phần mềm: Lỗi trong phần mềm hoặc hệ điều hành có thể dẫn đến hỏng cơ sở dữ liệu.
Tấn công mạng: Tấn công từ hacker có thể xóa hoặc làm hỏng dữ liệu.
Lỗi của người dùng: Những thao tác nhầm lẫn như xóa dữ liệu hoặc ghi đè dữ liệu cũng có thể gây mất mát thông tin.
2. Các phương pháp Backup MySQL Database
2.1. Sử dụng lệnh “mysqldump”
mysqldump là một công cụ dòng lệnh phổ biến được tích hợp sẵn trong MySQL. Nó cho phép sao lưu toàn bộ cơ sở dữ liệu hoặc từng bảng riêng lẻ.
Cú pháp cơ bản:
mysqldump -u [username] -p [database_name] > [backup_file].sql
Trong đó:
[username] là tên người dùng MySQL.
[database_name] là tên của cơ sở dữ liệu bạn muốn sao lưu.
[backup_file].sql là tên tập tin sao lưu sẽ được tạo ra.
Ví dụ:
mysqldump -u root -p mydatabase > mydatabase_backup.sql
2.2. Sử dụng “mysqlpump”
mysqlpump là một công cụ sao lưu mới hơn so với mysqldump và được tối ưu hóa để nhanh chóng sao lưu cơ sở dữ liệu lớn bằng cách thực hiện song song.
Cú pháp cơ bản:
mysqlpump -u [username] -p [database_name] > [backup_file].sql
Ví dụ:
mysqlpump -u root -p mydatabase > mydatabase_backup.sql
2.3. Sử dụng “XtraBackup”
XtraBackup là một công cụ sao lưu từ Percona, cho phép sao lưu nhanh chóng và không làm gián đoạn hoạt động của cơ sở dữ liệu. Đây là lựa chọn tốt cho các cơ sở dữ liệu lớn và hệ thống yêu cầu cao về thời gian hoạt động.
Cài đặt Percona XtraBackup:
sudo apt-get install percona-xtrabackup-24
Thực hiện sao lưu:
xtrabackup --backup --target-dir=/path/to/backup/dir --user=[username] --password=[password]
2.4. Sử dụng lệnh SQL
Ngoài các công cụ dòng lệnh, bạn cũng có thể sao lưu cơ sở dữ liệu bằng cách xuất dữ liệu trực tiếp từ MySQL Workbench hoặc sử dụng các lệnh SQL.
Xuất dữ liệu từ MySQL Workbench:
Mở MySQL Workbench.
Kết nối đến cơ sở dữ liệu của bạn.
Chọn cơ sở dữ liệu cần sao lưu từ danh sách.
Chọn "Data Export" từ menu.
Chọn các bảng hoặc toàn bộ cơ sở dữ liệu để xuất và chọn định dạng tập tin.
Sử dụng lệnh SQL:
SELECT * INTO OUTFILE '/path/to/backup_file.csv' FROM table_name;
3. Lên lịch Backup MySQL Database tự động
Việc sao lưu thủ công có thể không hiệu quả đối với các hệ thống lớn hoặc có tần suất cập nhật cao. Do đó, việc thiết lập sao lưu tự động là cần thiết. Để thực hiện điều đó bạn có thể sử dụng các cách như sau:
3.1. Sử dụng Cron Jobs (Linux)
Cron là một trình lập lịch công việc tự động trên các hệ thống Unix-like. Bạn có thể tạo một cron job để tự động sao lưu cơ sở dữ liệu MySQL.
Bước 1: Mở trình chỉnh sửa cron
crontab -e
Bước 2: Thêm dòng lệnh sau để sao lưu hàng ngày lúc 2h00
0 2 * * * /usr/bin/mysqldump -u [username] -p[password] [database_name] > /path/to/backup/dir/[backup_file].sql
3.2. Sử dụng Task Scheduler (Windows)
Trên Windows, bạn có thể sử dụng Task Scheduler để lập lịch sao lưu tự động.
Bước 1: Mở Task Scheduler.
Bước 2: Tạo một tác vụ mới và thiết lập thời gian, tần suất chạy tác vụ.
Bước 3: Thêm hành động chạy tập lệnh sao lưu.
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe" -u [username] -p[password] [database_name] > C:\path\to\backup\dir\[backup_file].sql
4. Kiểm tra và khôi phục dữ liệu
Backup MySQL Database chỉ thực sự có giá trị khi bạn có thể khôi phục nó một cách chính xác. Do đó, việc kiểm tra định kỳ các tập tin sao lưu và quy trình khôi phục là rất quan trọng.
4.1. Kiểm tra sao lưu
Bạn nên định kỳ kiểm tra các tập tin sao lưu để đảm bảo rằng chúng không bị hỏng và có thể sử dụng được khi cần thiết.
Ví dụ:
mysql -u [username] -p [database_name] < /path/to/backup/dir/[backup_file].sql
4.2. Khôi phục cơ sở dữ liệu
Khôi phục cơ sở dữ liệu từ tập tin sao lưu có thể được thực hiện dễ dàng bằng lệnh mysql.
Cú pháp:
mysql -u [username] -p [database_name] < [backup_file].sql
Ví dụ:
mysql -u root -p mydatabase < mydatabase_backup.sql
Kết Luận
Backup MySQL Database là một quy trình quan trọng và cần được thực hiện định kỳ để bảo vệ dữ liệu của bạn. Bằng cách sử dụng các công cụ và phương pháp sao lưu khác nhau như mysqldump, mysqlpump, XtraBackup, và thiết lập sao lưu tự động, có thể đảm bảo rằng dữ liệu của bạn luôn an toàn và có thể khôi phục nhanh chóng khi cần thiết. Đừng quên kiểm tra định kỳ các bản sao lưu để đảm bảo tính toàn vẹn và khả năng khôi phục của chúng.
Nguồn: https://suncloud.vn/backup-mysql-database
0 notes
Text
Cómo respaldar automáticamente base de datos con cPanel
Cómo respaldar automáticamente base de datos con cPanel aparece primero en nuestro https://jonathanmelgoza.com/blog/respaldar-automaticamente-base-de-datos/
Muchas veces necesitamos estar respaldando la base de datos de un proyecto ya sea para seguridad o para un sistema en pruebas, hoy veremos cómo respaldar automáticamente base de datos phpmyadmin con cPanel mediante un cronjob.
En el desarrollo web muchas veces necesitamos estar respaldo bases de datos de proyectos en producción.
En mi caso al entregar un sistema web suelo respaldar cada cierto tiempo la base de datos automáticamente.
Esto en el periodo de pruebas en que el cliente está trabajando el sistema por si llegara a pasar algo tener la información segura del día anterior.
Incluso si este no es tu caso, pero por seguridad necesitas que se esté guardando la información está perfecto.
Hoy vamos a ver cómo respaldar automáticamente base de datos mediante la ayuda de un trabajo de cron.
Un trabajo de cron es una orden que le dices a tu servidor que quieres que se esté ejecutando cada cierto periodo de tiempo, ya sea ejecutar un comando o un script personalizado.
Este artículo se basa en que tienes un servidor u hosting con cPanel, te dejo una lista de hosting de calidad con cPanel.
Lo que tenemos que hacer es ingresar a nuestro cPanel.
Debemos buscar la opción cronjobs o trabajo de cron, puede llamarse un poco diferente en tu servidor.
Después de ingresar debemos ver algo similar a lo siguiente:
En la sección comando debemos escribir el siguiente comando:
mysqldump -u[usuario] -p[contraseña] [base de datos] > /home/turuta/public_html/proyecto/database/backups/db_$(date +\%d-\%m-\%Y).sql
Donde usuario es tu usuario, contraseña es la contraseña de este usuario y base de datos es el nombre de la base de datos que quieres respaldar.
Ten en cuenta que este usuario deberá tener permisos establecidos para esta base de datos, esto lo haces en las opciones de base de datos de tu menú principal de cPanel.
Deberás cambiar tambien la ruta donde se almacenarán tus respaldos.
Como puedes ver el nombre del respaldo variara según el día, esto es así porque yo elegí crear un respaldo diario.
Para elegir cada cuanto se ejecutará el comando y por ende se creará un respaldo de tu base de datos vamos a ir a la opción de Configuración común.
Haz clic en el despegable y elige la opción que más te parezca, si ya te sientes más cómodo con los cronjob puedes editar manualmente los recuadros de abajo.
Ahora cada que se ejecute veremos que se crea un archivo SQL en la ruta que elegiste.
Si vamos a un phpmyadmin podremos importar este archivo sin problemas.
Ahora que sabemos cómo respaldar automáticamente base de datos mediante cronjob no olvides compartirlo en tus redes sociales o dejarnos un comentario en la sección de abajo si tienes cualquier duda, será un placer ayudarte.
¡Hasta luego!
1 note
·
View note